P1118 [USACO06FEB]数字三角形`Backward Digit Su`…
杨辉三角的带权应用,杨辉三角用组合数推,(记得从二开始),什么数组该赋什么值想好了再写
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int f[13][14],n,summ,sum,w[14],ff; bool vis[13]; void zu_he(){ for(int i=1;i<=n;i++) f[i][1]=1; for(int i=2;i<=n;i++){ for(int j=2;j<=i;j++){ f[i][j]=f[i-1][j]+f[i-1][j-1]; } } } void dfs(int num){ if(summ>sum) return; if(num==n+1){ if(summ==sum){ for(int i=1;i<=n;i++) printf("%d ",w[i]); ff=2; // exit(0); } return; } if(ff==2) return; for(int i=1;i<=n;i++){ if(vis[i]){ vis[i]=0; w[num]=i; summ+=(f[n][num]*i); dfs(num+1); if(ff==2) return; summ-=(f[n][num]*i); vis[i]=1; } } } int main(){ scanf("%d%d",&n,&sum); for(int i=1;i<=n;i++) vis[i]=1; zu_he(); dfs(1); return 0; }