POJ3187(next_permutation)

一开始先用最简单的试试,实在是TLE再想其他办法。不要一直觉得总有公式可以写

//#define LOCAL

#include <cstdio>
#include <cstring>
#include <algorithm>
#define SIZE 10

using namespace std;

int main(){
#ifdef LOCAL
    freopen("data.in", "r", stdin);
#endif
    int n, target;
    int map[SIZE];

    scanf("%d%d", &n, &target);
    for(int i = 0; i < n; i++)
        map[i] = i + 1;

    do{
        int temp[SIZE];

        for(int i = 0; i < n; i++)
            temp[i] = map[i];
        //copy(map, map + n, temp);

        for(int i = n - 1; i >= 0; i--){
            for(int j = 0; j < i; j++)
                temp[j] += temp[j + 1];
        }

        if(temp[0] == target)
            break; 
    }while(next_permutation(map, map + n));

    for(int i = 0; i < n; i++)
        printf("%d%c", map[i], i == n -1 ? '\n': ' ');

    return 0;
}
点赞