POJ 3187 Backward Digit Sums 枚举水~
POJ 3187 Backward Digit Sums
http://poj.org/problem?id=3187
题目大意:
给你一个原始的数字序列: 3 1 2 4 他可以相邻的元素相加得到 4 3 6 然后 7 9 最后得到16,现在给定序列的长度,还有最后的得数,求原始序列(多解则取最小)
思路:
直接枚举即可。
下面是next_permutation版本。
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> using namespace std; int a[12],sum[12][15]; int main() { int n,s; while(~scanf("%d%d",&n,&s)) { for(int i=1;i<=10;i++) a[i]=i; bool find=false; do { memcpy(sum[1],a,sizeof(a)); for(int i=2;i<=n;i++) for(int j=1;j<=n-i+1;j++) sum[i][j]=sum[i-1][j]+sum[i-1][j+1]; if(sum[n][1]==s) break; }while(next_permutation(a+1,a+n+1)); for(int i=1;i<n;i++) printf("%d ",a[i]); printf("%d\n",a[n]); } return 0; }
新 blog : www.hrwhisper.me