日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

二进制枚举子集

發(fā)布時(shí)間:2025/3/20 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 二进制枚举子集 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

思路:

利用二進(jìn)制的“開關(guān)”特性枚舉;詳細(xì)為:如果給定集合A大小為n,則想象A = {a[0], a[1], ..., a[n-1]}的每一個(gè)元素相應(yīng)一個(gè)開關(guān)位(0或1),0表示不出現(xiàn),1表示出現(xiàn)。當(dāng)每一個(gè)元素的開關(guān)位的值確定時(shí),就得到一個(gè)子集。因此共同擁有2^n-1種情況(全0為空集,這里不考慮);我們利用區(qū)間[1, 2^n-1],該區(qū)間上的每一個(gè)整數(shù)相應(yīng)一個(gè)子集。相應(yīng)方法是遍歷該整數(shù)二進(jìn)制表示的每一位。若該位為1則相應(yīng)子集中存在相應(yīng)元素。否則不存在。

代碼:

#include <bits/stdc++.h>//二進(jìn)制法 using namespace std; void print_subset(int n, int s) {for (int i = 0; i < n; i++)if (s & (1 << i))cout << i << " ";cout << endl; } int main(int argc, char const *argv[]) {int n;while (cin >> n && n)for (int i = 0; i < (1 << n); i++)print_subset(n, i);return 0; }

CF #306 (Div. 2) B. Preparing Olympiad

題意:
給你一個(gè)數(shù)組。求滿足子集的個(gè)數(shù):滿足的條件: 子集中全部元素的和不超過給定的l 和 r ;最大值-最小值 < x;
代碼:
#include<iostream> #include<cstdio> #include<cstring> #include<math.h> using namespace std; #define LL long long #define clr(a,b) memset(a,b,sizeof a) int n,l,r,x; int A[26]; int main() {#ifndef ONLINE_JUDGEfreopen("in.txt","r",stdin);freopen("out.txt","w",stdout);#endif // ONLINE_JUDGEwhile(~scanf("%d%d%d%d",&n,&l,&r,&x)){for(int i=0; i<n; i++){scanf("%d",&A[i]);}int m=1<<n;int cnt=0;for(int i=0; i<m; i++){int Max=-1;int Min=0x3f3f3f3f;int s=0;for(int j=0; j<n; j++){if(i&(1<<j)){s+=A[j];if(A[j]>Max) Max=A[j];if(A[j]<Min) Min=A[j];}}if(s>=l&&s<=r&&Max-Min>=x) cnt++;}printf("%d\n",cnt);}return 0; }

總結(jié)

以上是生活随笔為你收集整理的二进制枚举子集的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。