a+b+c=n 조건을 만족하는 경우의 수
void f(int a1, int a2, int a3) {
// base
if (a1+a2+a3 == n) {
if (visited[a1][a2][a3] == 0) {
//solution++;
}
visited[a1][a2][a3] = 1;
return;
}
f(a1+1, a2, a3);
f(a1, a2+1, a3);
f(a1, a2, a3+1);
}좀더 일반화를 해보자.
a+b+c=3 일 경우, 마지막 c는 a,b가 정해지면 알 수 있다.
a+b=3, a+b=2, a+b=1, a+b=0
a+b=3 은 다시
a=3, a=2, a=1, a=0 으로 분류
a1+a2+a3 …+ ak = n일 때 ( 0 <= ak <= n)
int f(int n, int k) {
// base
if (k == 1) {
return 1;
}
int solution = 0;
for (int i = 0; i <= n; i++) {
solution += f(n-i, k-1);
}
return solution;
}