Problem A: How do you add?

It's a very simple problem - given a number N, how many ways can K numbers less than N add up to N?
For example, for N = 20 and K = 2, there are 21 ways:
0+20
1+19
2+18
3+17
4+16
5+15
...
18+2
19+1
20+0
Input
Each line will contain a pair of numbers N and K. N and K will both be an integer from 1 to 100, inclusive. The input will terminate on 2 0's.Output
Since Larry is only interested in the last few digits of the answer, for each pair of numbers N and K, print a single number mod 1,000,000 on a single line.Sample Input
20 2 20 2 0 0
Sample Output
21 21
题意:给定n,k,求出由k个数字加出n的方法种数。
思路: dp。 i表示和,j表示种数, dp[i][j] = dp[i - 1][j] + dp[i][j - 1],
代码:
#include <stdio.h>
#include <string.h>
long long n, k, dp[105][105];
int main() {
for (int i = 1; i <= 100; i ++) {
dp[i][1] = 1;
dp[1][i] = i;
}
for (int i = 2; i <= 100; i ++) {
for (int j = 2; j <= 100; j ++) {
dp[i][j] = (dp[i - 1][j] + dp[i][j - 1]) % 1000000;
}
}
while (~scanf("%lld%lld", &n, &k) && n || k) {
printf("%lld\n", dp[n][k]);
}
return 0;
}