题目链接
注意剪枝,不然时间超限
import java.util.*;
import java.math.*;
public class Main {
public static int ans=0,k,n;
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
k=sc.nextInt();
dfs(0,1,0,n-k+1);
System.out.println(ans);
}
public static void dfs(int sum,int cur,int xuan,int max){//cur当前位置,k一共几个,n选了几个
if(cur>max)
return;
if(sum==n&&xuan==k){
ans++;
return;
}
if(sum>n||xuan>=k)
return;
for(int i=cur;sum+i*(k-xuan)<=n;i++){
sum+=i;
dfs(sum,i,xuan+1,max);
sum-=i;
}
}
}