2012-01-29 12:41:42Morris
[UVA] 10943 - How do you add?
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
題目 : 換句話說有 k 個不同的箱子, n 個球, 有幾種放法,
照數學來說直接拿 k 個隔板就可以了, 接下來就是排列組合
#include <stdio.h>
int main() {
long long C[201][201] = {0};
int N, K;
C[0][0] = 1;
for(N = 1; N <= 200; N++) {
C[N][0] = 1;
for(K = 1; K <= N; K++)
C[N][K] = (C[N-1][K-1] + C[N-1][K])%1000000;
}
while(scanf("%d %d", &N, &K) == 2) {
if(N == 0 && K == 0)
break;
printf("%lld\n", C[N+K-1][K-1]);
}
return 0;
}
Thank...