码迷,mamicode.com
首页 > 其他好文 > 详细

dfs:部分和问题

时间:2015-04-08 01:04:32      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

dfs:部分和问题

dfs:部分和问题

给定整数a1, a2 … an,判断是否从中可以选出若干数,使他们的和恰好为k

注意:

每个数只能选择一次,当然也可以不选
// CreateTime: 2015-04-07 22:55:39

#include <iostream>

using namespace std;

int n;
int a[100005];
int k;
int ok;

void dfs(int step, int sum) {
    if (n == step) {
        if (sum == k) {
            ok = 1;
        }
        return;
    }
    dfs(step+1, sum);
    dfs(step+1, sum+a[step]);
}

int main(void) {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    cin >> k;

    ok = 0;
    dfs(0, 0);

    if (ok) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }

    return 0;
}
// 4 1 2 4 7 13
// 4 1 2 4 7 15

还可以写的更美观点

// CreateTime: 2015-04-07 22:55:39

#include <iostream>

using namespace std;

int n;
int a[100005];
int k;
int ok;

int dfs(int step, int sum) {
    if (n == step) {
        if (sum == k) {
            return 1;
        } else {
            return 0;
        }
    }
    if(dfs(step+1, sum)) {
        return 1;
    }
    if(dfs(step+1, sum+a[step])) {
        return 1;
    }
}

int main(void) {
    cin >> n;
    for (int i = 0; i < n; i++) {
        cin >> a[i];
    }
    cin >> k;

    ok = 0;
    if(dfs(0, 0)) {
        cout << "Yes" << endl;
    } else {
        cout << "No" << endl;
    }

    return 0;
}
// 4 1 2 4 7 13
// 4 1 2 4 7 15

dfs:部分和问题

标签:

原文地址:http://www.cnblogs.com/sunznx/p/4400973.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!