POJ3187——Backward Digit Sums

来源:互联网 发布:社交网络 肖恩帕克 编辑:程序博客网 时间:2024/06/08 20:03

题目的意思:给你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;}


0 0
原创粉丝点击