题目的意思:给你N和sum。在1~N的排列中,找到最小字典序的排列,使得这N个数的排序按照题目的方法能最后组成sum这个数。
简单的穷竭搜索。用next_permutation枚举。
下面的是AC的代码:
#include <iostream>
#include <algorithm>
using namespace std;
int num[11];
int temp[15];
int main()
{
int n, sum, i;
while(cin >> n >> sum)
{
for(i = 1; i <= n; i++)
num[i] = i;
do
{
for(i = 1; i <= n; i++)
temp[i] = num[i];
for(i = n; i > 0; i--)
{
for(int j = 1; j < i; j++)
temp[j] = temp[j] + temp[j + 1];
}
if(temp[1] == sum)
break;
}while(next_permutation(num + 1, num + n + 1));
cout << num[1];
for(i = 2; i <= n; i++)
cout << " " << num[i];
cout << endl;
}
return 0;
}