uva 11825 - Hackers' Crackdown dp

来源:互联网 发布:亚马逊a9算法基本要素 编辑:程序博客网 时间:2024/05/15 21:28
/******************* * Author:fisty * Data:2014-10-27 * uva11825 * 状压DP ******************/#include <cstdio>#include <cstring>#include <algorithm>using namespace std;#define MAX_N 1<<16int p[MAX_N];int main(){        int t;        int cnt = 1;        while(scanf("%d", &t) != EOF){                if(t == 0) break;                for(int i = 0;i < t; i++){                        int n, x;                        scanf("%d", &n);                        p[i] = 1 << i;//此计算机与他相邻计算机的并集                        while(n--){                                scanf("%d", &x);                                p[i] |= (1<<x);                        }                }                int cover[1<<t+1];//若干Pi的集合s中所有Pi的并集                for(int s = 0;s < (1<<t); s++){                        cover[s] = 0;                        for(int i = 0;i < t; i++){                                if(s & (1 << i)){                                        cover[s] |= p[i];                                }                        }                }                        int f[MAX_N];                f[0] = 0;                int ALL = (1 << t)-1;                for(int s = 1;s < (1 << t); s++){                        f[s] = 0;                        for(int s0 = s; s0 != 0; s0 = (s0-1)&s){//(s0-1)&s每次可以减去最低位的1,来枚举子集                                if(cover[s0] == ALL) f[s] = max(f[s], f[s^s0] + 1);                        }                }                        printf("Case %d: %d\n",cnt++, f[ALL]);        }        return 0;}

0 0
原创粉丝点击