二进制枚举子集
时间:2022-08-05
本文章向大家介绍二进制枚举子集,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
二进制枚举子集
二进制枚举子集(注意换行问题)
从0开始枚举
for (int i = 0; i < (1 << n); ++i) {
for (int j = 0; j < n; ++j)
if (i & (1 << j)) // do something;
}
从1开始枚举
for (int i = 2; i < (1 << (n + 1)); i += 2)
for (int j = 1; j <= n; ++j)
if (i & (1 << j)) // do something;
算法训练 和为T
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;
}
原文地址:https://www.cnblogs.com/Cattle-Horse/p/16555621.html
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 关于jHispster框架在构建中的出现的error修复
- 聊聊flink的RestClientConfiguration
- 【收藏】简单易用 TensorFlow 代码集,GAN通用框架、函数
- 强推!《PyTorch中文手册》来了
- 中文NLP福利!大规模中文自然语言处理语料
- 安卓开发:玩转图片社交系统-仿探探卡片式滑动效果
- 抖音爬虫 | 手把手教你下载指定的Douyin)号的视频
- 深度优化局部拉普拉斯金字塔滤波器。
- windows下使用word2vec训练维基百科中文语料全攻略!(一)
- 关于深度多任务学习的 3 点经验
- 一个完整的TDD演练案例(完)
- 对Flink流处理模型的抽象
- 一个完整的TDD演练案例(四)
- Linux GDB jump 命令介绍
- 如何保证版本功能的空中加油?