题目链接
用杨辉三角的知识做
import java.util.*;
import java.math.*;
import java.io.*;
public class Main {
public static int n,sum,y[][],nums[],is[];
public static void main(String[] args){
Scanner sc=new Scanner(System.in);
n=sc.nextInt();
sum=sc.nextInt();
y=new int[n+1][n+1];
nums=new int[n+1];
is=new int[n+1];
y[1][1]=1;
for(int i=2;i<=n;i++){
for(int j=1;j<=i;j++)
y[i][j]=y[i-1][j-1]+y[i-1][j];
}
dfs(1,0);
}
public static int dfs(int cur,int s){
if(s>sum)
return 0;
if(s==sum&&cur==n+1){
for(int i=1;i<=n;i++){
System.out.print(nums[i]+" ");
}
return 1;
}
for(int i=1;i<=n;i++){
if(is[i]==0){
nums[cur]=i;
is[i]=1;
//System.out.println(s+" "+y[n][cur]+" "+i);
if(dfs(cur+1,s+y[n][cur]*i)==0){
is[i]=0;
}
else{
return 1;
}
}
}
return 0;
}
}