每个ai在最后sum中的值是本身值乘上组合数,按这个dfs一下即可
#include#include using namespace std;int n,s,ans[15],c[20][20];bool u[15],f=0;int dfs(int a,int b){ if(b==n) { if(a==s) f=1; return 0; } for(int i=1;i<=n;i++) if(!u[i]) { u[i]=1,ans[b]=i; if(a+c[n-1][b]*ans[b]<=s) dfs(a+c[n-1][b]*ans[b],b+1); if(f) return 0; u[i]=0; }}int main(){ c[0][0]=1; for(int i=1;i<=15;i++) { c[i][0]=1; for(int j=1;j<=i;j++) c[i][j]=c[i-1][j-1]+c[i-1][j]; } scanf("%d%d",&n,&s); dfs(0,0); if(f) for(int i=0;i