hdu 3006(状态压缩)
生活随笔
收集整理的這篇文章主要介紹了
hdu 3006(状态压缩)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
題意:給一些集合,取一部分集合合并能夠得到多少個(gè)新集合。
解題思路:這道題數(shù)字最多只有14,可以用狀態(tài)壓縮去做,每一位代表某個(gè)數(shù),0代表不取,1代表取這個(gè)數(shù)。剩下的就是去模擬狀態(tài)了。不多講,輸入狀態(tài)壓縮入門(mén)題。
#include<iostream> #include<cstdio> #include<cstring> using namespace std;const int maxn = 105; int n,m,Set[maxn]; //s[i]表示第i個(gè)集合的狀態(tài) bool vis[1<<14];int main() {int k,num;while(scanf("%d%d",&n,&m)!=EOF){memset(vis,false,sizeof(vis));memset(Set,0,sizeof(Set));for(int i = 1; i <= n; i++){scanf("%d",&k);for(int j = 1; j <= k; j++){scanf("%d",&num);Set[i] |= 1 << (num-1);}}int bit = 1 << m, ans = 0;vis[0] = true;for(int i = 0; i < bit; i++){if(vis[i] == false) continue;for(int j = 1; j <= n; j++){int sta = i | Set[j];if(vis[sta] == false)ans++;vis[sta] = true;}}printf("%d\n",ans);}return 0; }
總結(jié)
以上是生活随笔為你收集整理的hdu 3006(状态压缩)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux Tomcat日志查看实用命令
- 下一篇: 微信开发SDK,Jeewx-Api 1.