快去|

egg_pain

园龄:2年6个月粉丝:0关注:1

📂笔记
🔖笔记
2022-08-15 21:53阅读: 95评论: 0推荐: 0

二进制枚举子集

二进制枚举子集

二进制枚举子集(注意换行问题)

方法一
for (int i = 0; i < (1 << n); ++i) {
        for (int j = 0; j < n; ++j)//遍历二进制每一位
            if (i & (1 << j))//判断第j位是否存在
              // do something;
    }
方法一
for (int k = S; k; k = (k - 1) & S) {
        for (int i = 0; i < n; ++i){
            if ((k >> i) & 1)
            //do something;
        }
    }

算法训练 和为T

蓝桥杯

WustOJ

Question:从一个大小为n的整数集中选取一些元素,使得它们的和等于给定的值T。每个元素限选一次,不能一个都不选。

数组从1开始
#include <bits/stdc++.h>  //二进制法
using namespace std;
#define endl '\n'
int main() {
    std::ios_base::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
    int n, ans = 0;
    cin >> n;
    vector<int> a(n + 1);
    for (int i = 1; i <= n; ++i) cin >> a[i];
    long long t, sum;
    cin >> t;
    for (int i = 2; i < (1 << (n + 1)); i += 2) {
        sum = 0;
        for (int j = 1; j <= n; ++j)
            if (i & (1 << j)) sum += a[j];
        if (sum == t) {
            for (int j = 1; j <= n; ++j)
                if (i & (1 << j)) cout << a[j] << ' ';
            cout << endl;
            ++ans;
        }
    }
    cout << ans << endl;
    return 0;
}
数组从0开始
#include <bits/stdc++.h>  //二进制法
using namespace std;
#define endl '\n'
int main() {
    std::ios_base::sync_with_stdio(false), std::cin.tie(nullptr), std::cout.tie(nullptr);
    int n, ans = 0;
    cin >> n;
    vector<int> a(n);
    for (int i = 0; i < n; ++i) cin >> a[i];
    long long t, sum;
    cin >> t;
    for (int i = 0; i < (1 << n); ++i) {
        sum = 0;
        for (int j = 0; j < n; ++j)
            if (i & (1 << j)) sum += a[j];
        if (sum == t) {
            bool ok = false;
            for (int j = 0; j < n; ++j)
                if (i & (1 << j)) cout << a[j] << ' ', ok = true;
            if(ok) cout << endl,++ans;
        }
    }
    cout << ans << endl;
    return 0;
}

本文作者:egg-pain

本文链接:https://www.cnblogs.com/egg-pain/p/16589761.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   egg_pain  阅读(95)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起