POJ 3187 Backward Digit Sums 题解 《挑战程序设计竞赛》

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3187 Backward Digit Sums 题解 《挑战程序设计竞赛》相关的知识,希望对你有一定的参考价值。

题目:POJ 3187

思路:

这道题很简单,用next_permutation枚举1~N的所有排列,然后依次相加,判断最后的和是否等于sum,是的话则break,即为字典序最前的。

 1 #include <iostream>
 2 #include <algorithm>
 3 
 4 using namespace std;
 5 
 6 int n;
 7 int sum;
 8 int mycase[11][11];
 9 
10 int main() {
11     cin >> n >> sum;
12     for (int i = 1; i <= n; i++) {
13         mycase[n][i] = i;
14     } 
15     do {
16         for (int i = n; i > 1; i--) {
17             for (int j = 1; j < i; j++) {
18                 mycase[i - 1][j] = mycase[i][j] + mycase[i][j + 1];
19             }
20         }
21         if (mycase[1][1] == sum) {
22             for (int i = 1; i <= n; i++) {
23                 cout << mycase[n][i] << " ";
24             }
25             break;
26         }
27     } while (next_permutation(mycase[n] + 1, mycase[n] + 1 + n));
28     return 0;
29 }

 注意:

  • next_permutaiton()的两个参数分别是枚举起始的元素,和结束的元素的后一个元素。

以上是关于POJ 3187 Backward Digit Sums 题解 《挑战程序设计竞赛》的主要内容,如果未能解决你的问题,请参考以下文章

poj 3187 Backward Digit Sums

POJ 3187 Backward Digit Sums

POJ3187 Backward Digit Sums 暴搜

POJ 3187 Backward Digit Sums

POJ 3187 Backward Digit Sums

POJ3187Backward Digit Sums[杨辉三角]