Problem A: How do you add?

It's a very simple problem - given a number N, how many ways can K numbers less than Nadd 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
参考:http://hi.baidu.com/zyz913614263/item/c64c7b5e96d94b2094eb0561
本题是一个规律题!!!
注意必须在打表的过程中对每个元素取模否则答案将会是错误的!!!!
n k 1 2 3 4 5 …… 100
1 1 2 3 4 5…… 100
2 1 3 6 10 15……
3 1 4 10 20 35 ……
4 1 5 15 35 70 ……
规律为 a[i][j]=a[i][j-1]+a[i-1][j]数据量很小,打表就过了,注意对1000000取模
代码如下已ac:
#include <stdio.h> #include <math.h> #include <algorithm> #include <string.h> #include <stdlib.h> using namespace std; long long nk[110][110]; int main() { int n,k; int i ; for(i = 1;i<=100;++i) nk[1][i] = i; for(i = 1;i<=100;++i) nk[i][1] = 1; int j; for(i = 2;i<=100;++i) for(j = 2;j<=100;++j) nk[i][j] = (nk[i][j-1]+nk[i-1][j])%1000000; while(scanf("%d %d",&n,&k)==2) { if(n==0&&k==0) break; printf("%lld\n",nk[n][k]); } return 0; }