这道题类似于把n个苹果放到k个盘子里且不能空盘子的问题。
递归(dfs)做法
#include <bits/stdc++.h>
//#define LL long long
using namespace std;
//typedef long long LL;
const int N = 1e5 + 10;
int n, k, ans;
void dfs(int a, int b, int c)//b为剩余的次数,c为剩余的数的大小,a为从1开始递归,保证不重复
{
if (b == 1)
{
ans++;
return;
}
for (int i = a; i <= c/b; ++i)//最大是n/k
{
dfs(i, b - 1, c - i);
}
}
int main()
{
ans = 0;
cin >> n >> k;
dfs(1, k, n);
cout << ans << endl;
return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)