题目链接:http://poj.org/problem?id=3187
又是一道暴力枚举的题,还是next_permutation,
第一眼看是一道类似杨辉三角的题,以为要用公式把杨辉三角的表达式先列一个表再对应元素相乘,但是是事实并不需要列表,只需要一层一层向上计算时对元素的值进行动态处理。
ac代码:
#include <iostream> #include <algorithm> #include <cstdio> using namespace std; int main(void){ int n,finaln; int a[12],b[12]; scanf("%d%d",&n,&finaln); for(int i=0;i<n;i++) a[i]=i+1; do{ for(int j=0;j<n;j++) b[j]=a[j]; for(int i=n-1;i>0;i--){ for(int k=0;k<i;k++){ b[k]=b[k]+b[k+1]; //动态处理元素的值 } } if(b[0]==finaln) break; }while(next_permutation(a,a+n)); for(int i=0;i<n;i++) cout<<a[i]<<' '; cout<<endl; return 0; }
18:57:08
2020-03-22