poj1664_简单dp

题目链接: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 }
原文地址:https://www.cnblogs.com/luomi/p/5544055.html