首页 > 其他 > 详细

POJ 3187 Backward Digit Sums

时间:2014-08-06 01:57:40      阅读:310      评论:0      收藏:0      [点我收藏+]

题目链接:http://poj.org/problem?id=3187


解析:
全排列基础问题

可以使用DFS,也可以使用STL中的next_permutation函数生成全排列

这里给出DFS的方法


代码:

#include <iostream>
#include <iomanip>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
using namespace std;
#define PI 3.1415926

bool visit[15];
int a[15],b[15];
int N, sum;

bool per(int k){
    if(k == (N+1)){
        int i,j;
        for(i=1; i<=N; ++i)
            b[i] = a[i];
        for(i=1; i<N; ++i){
            for(j=1; j<=N-i; ++j){
                b[j] = b[j]+b[j+1];
            }
        }
        if(b[1] == sum){
            for(i=1; i<=N; ++i)
                printf("%d ", a[i]);
            printf("\n");
            return true;
        }
        return false;
    }

    int i;
    for(i=1; i<=N; ++i){
        if(!visit[i]){
            visit[i] = true;
            a[k] = i;
            if(per(k+1))
                return true;
            visit[i] = false;
        }
    }
    return false;
}

int main(){
    #ifdef LOCAL
        freopen("1.in","r", stdin);
    #endif

    while(~scanf("%d%d", &N, &sum)){
        memset(visit, false, sizeof(visit));
        per(1);
    }
    return 0;
}


POJ 3187 Backward Digit Sums,布布扣,bubuko.com

POJ 3187 Backward Digit Sums

原文:http://blog.csdn.net/mullerwch/article/details/38392961

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!