这道题类似于把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;
}