Problem E : How do you add?
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
#include <iostream> #include <cstdio> using namespace std; const int maxn = 110; int dp[maxn][maxn]; int N , K; void initial(){ for(int i = 0;i <= 100;i++){ dp[i][1] = 1; dp[0][i] = 1; } for(int i = 1;i <= 100;i++){ for(int k = 2;k <= 100;k++){ for(int j = 0;j <= i;j++){ dp[i][k] = (dp[i][k]+dp[j][k-1])%1000000; } } } } int main(){ initial(); while(cin >> N >> K && (N||K)){ cout << dp[N][K] << endl; } return 0; }