把 $m$ 个同样的苹果放在 $n$ 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法。($5,1,1$ 和 $1,1,5$ 是同一种方法)
第一行是测试数据的数目 $t$,以下每行均包括二个整数 $m$ 和 $n$,以空格分开。
对输入的每组数据 $m$ 和 $n$,用一行输出相应的结果。
1 7 3
8
3 3 2 4 3 2 7
### 样例输出 #2
2 4 2
对于所有数据,保证:$1\leq m,n\leq 10$,$0 \leq t \leq 20$。
#include <bits/stdc++.h> using namespace std; int t, n, m, cnt; void dfs(int step, int k, int left) { if (step == n && left == 0) { /*cout << "这是第" << step << "层第" << cnt + 1 << "次记录,有k=" << k << ", left=" << left << endl;*/ cnt++; return; } if (step == n || left < 0) return; for (int i = k ; i <= left; i++) { /*cout << "这是第" << step << "层,有i=" << i << ", k=" << k << ", left=" << left << endl;*/ dfs(step + 1, i, left - i); } } int main() { cin >> t; while (t--) { cnt = 0; cin >> m >> n; dfs(0, 0, m); cout << cnt << endl; } return 0; }