题目链接:http://poj.org/problem?id=1664
Description
把M个同样的苹果放在N个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法?(用K表示)5,1,1和1,5,1 是同一种分法。
Input
第一行是测试数据的数目t(0 <= t <= 20)。以下每行均包含二个整数M和N,以空格分开。1<=M,N<=10。
Output
对输入的每组数据M和N,用一行输出相应的K。
Sample Input
1 7 3
Sample Output
8
1 #include <cstdio> 2 #include <cstring> 3 #include <iostream> 4 #include <algorithm> 5 using namespace std; 6 7 int dp[12][12]; 8 void find() 9 { 10 for(int i = 1; i <= 10; i++) 11 dp[1][i] = 1; 12 for(int i = 2; i <= 10; i++) 13 { 14 for(int j = i; j <= 10; j++) 15 { 16 if(i == j) 17 dp[i][j] = 1; 18 for(int k = 1; k <= j - i; k++) 19 dp[i][j] += dp[k][j - i]; 20 } 21 } 22 } 23 int main() 24 { 25 int t, n, m; 26 scanf("%d", &t); 27 find(); 28 while(t--) 29 { 30 int sum = 0; 31 scanf("%d %d", &m, &n); 32 for(int i = 1; i <= n; i++) 33 sum += dp[i][m]; 34 printf("%d ", sum); 35 } 36 return 0; 37 }