如下,不知道还有没有优化的空间
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int n = 0, k = 0, ans = 0;
vector<int>path;
int DFS(int num,int sum,int last)
{
if (num == k) {
if (sum == n) {
ans++;
}
return 0;
}
for (int i = last;i < n;i++) {
if (sum + last*(k-num) > n) {
break;
}
num++;
sum += i;
DFS(num, sum, i);
num--;
sum -= i;
}
return 0;
}
int main()
{
cin >> n >> k;
DFS(0, 0, 1);
cout << ans;
return 0;
}