uva 11825 - Hackers' Crackdown

来源:互联网 发布:编程开发软件是什么 编辑:程序博客网 时间:2024/06/05 20:07

题目:uva 11825 - Hackers' Crackdown

思路:状态压缩


#include <algorithm>#include <iostream>#include <string>#include <cstring>#include <cstdio>#include <cmath>using namespace std;#define maxn ((1<<16)+1)int p[20];int covers[maxn];int dp[maxn];int main(){    int n,m,x;    int cas=0;    while(scanf("%d",&n),n)    {        for(int i=0;i<n;i++)        {            scanf("%d",&m);            p[i]=(1<<i);            while(m--)            {                scanf("%d",&x);                p[i]|=(1<<x);            }        }        for(int i=0;i<(1<<n);i++)        {            covers[i]=0; // 用来表示若干计算机的集合            for(int j=0;j<n;j++)                if(i&(1<<j))                    covers[i]|=p[j];        }        memset(dp,0,sizeof(dp));        for(int i=1;i<(1<<n);i++)        {            dp[i]=0;            for(int j=i;j>0;j=(j-1)&i)                if(covers[j]==(1<<n)-1)                    dp[i]=max(dp[i],dp[i^j]+1);        }        printf("Case %d: ",++cas);        printf("%d\n",dp[(1<<n)-1]);    }    return 0;}


原创粉丝点击