加上x+(k-stp)*now>n这个剪枝才能过
#include<iostream> #include<cstdio> using namespace std; int n,k,ans; void search(int x,int now,int stp){ if(stp==k&&x==n) {ans++;return;} if(stp==k||x>n||x+(k-stp)*now>n) return; for(int i=now;i<=n-x;i++){ search(x+i,i,stp+1); } return; } int main(){ cin>>n>>k; if(k==1) {cout<<1<<endl;return 0;} for(int i=1;i<n;i++){ search(i,i,1); } cout<<ans<<endl; return 0; }