洛谷P2386 放苹果

题目描述

把 $m$ 个同样的苹果放在 $n$ 个同样的盘子里,允许有的盘子空着不放,问共有多少种不同的分法。($5,1,1$ 和 $1,1,5$ 是同一种方法)

输入格式

第一行是测试数据的数目 $t$,以下每行均包括二个整数 $m$ 和 $n$,以空格分开。

输出格式

对输入的每组数据 $m$ 和 $n$,用一行输出相应的结果。

样例 #1

样例输入 #1

1 7 3

样例输出 #1

8

样例 #2

样例输入 #2

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; }