递推式:f(n,k)=sum(f(i,k-1)) (0<=i<=n)
Problem A: How do you add?
Larry is very bad at math - he usually uses a calculator, which worked well throughout college. Unforunately, he is now struck in a deserted island with his good buddy Ryan after a snowboarding accident. They're now trying to spend some time figuring out some good problems, and Ryan will eat Larry if he cannot answer, so his fate is up to you!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<cstring>
#include<string>
#include<algorithm>
using namespace std;
#define mod 1000000
int dp[110][110];
int main()
{
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for(int i=1;i<=100;i++)
{
dp[0][i]=1;
for(int j=1;j<=100;j++)
dp[j][i]=(dp[j-1][i]+dp[j][i-1])%mod;
}
int n,k;
while(cin>>n>>k &&(n+k))
cout<<dp[n][k]<<endl;
return 0;
}