一、题意:给定n,求1~n的一个排列,这个排列需要满足以下两个要求:1、杨辉三角最后的和为sum 2、字典序最小
二、思路:暴力枚举每一个排列,然后计算和并与sum进行比较。这里我比较费解的是为什么没超时。。。
三、代码:
#include"iostream" #include"stdio.h" #include"algorithm" using namespace std; int n,sum; int GetArraySum(int *a) { for(int i=n-1;i>0;i--) { for(int j=0;j<i;j++) { a[j]=a[j]+a[j+1]; } } return a[0]; } void GetAns() { int a[15],b[15]; for(int i=0;i<n;i++) { a[i]=i+1; } do { for(int i=0;i<n;i++) b[i]=a[i]; if(GetArraySum(b)==sum) { for(int i=0;i<n-1;i++) { cout<<a[i]<<' '; } cout<<a[n-1]<<endl; return; } }while(next_permutation(a,a+n)); } int main() { while(scanf("%d%d",&n,&sum)==2) { GetAns(); } return 0; }