P1118 數字三角形【楊輝三角+全排列】
阿新 • • 發佈:2019-02-10
#include<bits/stdc++.h> using namespace std; int a[20][20]; int b[20]; int c[20][20]; int cmp(int a,int b) { return a>b; } int main() { int n=1,sum; cin>>n>>sum; for(int i=1;i<=n;i++) b[i]=i; int s=0; for(int i=1;i<=n;i++) { c[i][1]=c[i][i]=1; } for(int i=3;i<=n;i++) { for(int j=1;j<=(i-1)/2;j++) { c[i][j+1]=c[i][i-j]=c[i-1][j]+c[i-1][j+1]; } } if(sum<n*n) return 0; do { int ok=1,w=0; for(int i=1;i<=n;i++) { w+=c[n][i]*b[i]; if(w>sum) sort(b+i,b+1+n,cmp); } for(int i=1;i<=n/2;i++) { if(b[i]>b[n-i+1]) { ok=0;break; } } if(ok==0) continue; for(int i=1;i<=n;i++) a[1][i]=b[i]; for(int i=2;i<=n;i++) { for(int j=1;j<=n-i+1;j++) { a[i][j]=a[i-1][j]+a[i-1][j+1]; } } if(a[n][1]==sum) { for(int i=1;i<n;i++) printf("%d ",b[i]); printf("%d\n",b[n]); break; } }while(next_permutation(b+1,b+1+n)); return 0; }