一、题意:给定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;
}