想了半天实在没有思路了,不知道该如何剪枝优化....
#include "bits/stdc++.h"
using namespace std;
int N,K;
int ans = 0 ;
void dfs(int x,int n,int s){//从x开始查找,当前是n个数,和为s
if(n > K || s > N || x > N) return;
// cout << x <<" " << n <<" " << s << endl;
if(n == K && s == N){
ans++;
return;
}
if(s+x > N) return;
dfs(x,n+1,s+x);//依旧选这个数
dfs(x+1,n,s);//不选
}
int main(){
cin >> N >> K;
dfs(1,0,0);
cout << ans;
return 0;
}