放苹果
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
其实我觉得题目类型说是递推更合适……
#include<iostream> #include<cstring> #include<cstdio> using namespace std; long t, n, m; long f[13][13]; int main() { freopen("poj1664.in", "r", stdin); scanf("%d", &t); while (t--) { memset(f, 0, sizeof(f)); scanf("%d%d", &n, &m); for(long i = 0; i <= n; i++) { f[i][0] = 1; f[i][1] = 1; } for(long i = 0; i <= m; i++) { f[0][i] = 1; f[1][i] = 1; } for(long i = 2; i <= n; i++) for(long j = 2; j <= m; j++) { if (i >= j) { f[i][j] = f[i][j - 1] + f[i - j][j]; } else f[i][j] = f[i][i]; } cout << f[n][m] <<endl; } return 0; }