题目描述
把 mm 个同样的苹果放在 nn 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法。(5,1,15,1,1 和 1,1,51,1,5 是同一种方法)
输入格式
第一行是测试数据的数目 tt,以下每行均包括二个整数 mm 和 nn,以空格分开。
输出格式
对输入的每组数据 mm 和 nn,用一行输出相应的结果。
输入输出样例
输入 #1
1 7 3
输出 #1
8
输入 #2
3 3 2 4 3 2 7
输出 #2
2 4 2
说明/提示
对于所有数据,保证:1\leq m,n\leq 101≤m,n≤10,0 \leq t \leq 200≤t≤20。
#include <iostream>
using namespace std;
int Apple(int m, int n) {
if (n == 1 || m == 0) {//递归终止条件
return 1;
}
if (n > m) {
return Apple(m, m);
}
return Apple(m, n - 1) + Apple(m - n, n);//将放苹果的方法分为两种,有空盘的和没有空盘的
}
int main() {
int t;
cin >> t;
while (t--) {
int m, n;
cin >> m >> n;
int x = Apple(m, n);
cout << x << endl;
}
return 0;
}
以上是用递归实现的c++程序,与队列和dp的方法相比更容易让人理解也更简洁