POJ3187 Backward Digit Sums
Posted xiaoxb17
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ3187 Backward Digit Sums相关的知识,希望对你有一定的参考价值。
要得到最终的和,第一行每个数字出现的(及被加的)次数正好为一个杨辉三角,所以直接枚举第一行就可以了
AC代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 5 using namespace std; 6 7 int lev[12][12]; 8 int box[12]; 9 int n,s; 10 11 12 void solve(){ 13 int sum; 14 lev[1][1]=1; 15 for(int i=2;i<=10;i++){ 16 for(int j=1;j<=i;j++){ 17 if(j==1||j==i) lev[i][j]=1; 18 else{ 19 lev[i][j]=lev[i-1][j-1]+lev[i-1][j]; 20 } 21 } 22 } 23 scanf("%d%d",&n,&s); 24 for(int i=1;i<=n;i++){ 25 box[i]=i; 26 } 27 do{ 28 sum=0; 29 for(int i=1;i<=n;i++){ 30 sum+=box[i]*lev[n][i]; 31 } 32 if(sum==s) break; 33 }while(next_permutation(box+1,box+n+1)); 34 for(int i=1;i<=n;i++){ 35 printf("%d%c",box[i], i == n ? ‘ ‘ : ‘ ‘); 36 } 37 } 38 39 int main (){ 40 solve(); 41 return 0; 42 }
以上是关于POJ3187 Backward Digit Sums的主要内容,如果未能解决你的问题,请参考以下文章
POJ3187 Backward Digit Sums 暴搜