码迷,mamicode.com
首页 > 其他好文 > 详细

uva11825

时间:2017-10-31 17:39:05      阅读:170      评论:0      收藏:0      [点我收藏+]

标签:code   for   turn   计算   题意   ace   ons   eof   ase   

题意是将n个集合P1,P2,P3,……,Pn分成尽量多组,使得每组中所有集合的并集等于全集。

Pi是对于计算机i及其相邻计算机的集合。

每个组就相当于一项服务。

整个动规相当于对一个集合进行划分。

先去开会,一会儿补坑。

#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;

const int maxn = 16;

int n;

int p[maxn], cover[1 << maxn], f[1 << maxn];

int main()
{
    int kase = 0;
    while (scanf("%d", &n) && n)
    {
        kase++;
        memset(p, 0, sizeof p);
        for (int i = 0; i < n; i++)
        {
            p[i] = 1 << i;
            int num;
            scanf("%d", &num);
            for (int j = 1; j <= num; j++)
            {
                int x;
                scanf("%d", &x);
                p[i] |= (1 << x);
            }
        }
        for (int S = 0; S < (1 << n); S++)
        {
            cover[S] = 0;
            for (int i = 0; i < n; i++)
                if (S & (1 << i)) 
                    cover[S] |= p[i];
        }
        f[0] = 0;
        int ALL = (1 << n) - 1;
        for (int S = 1; S < (1 << n); S++)
        {
            f[S] = 0;
            for (int S0 = S; S0; S0 = (S0 - 1) & S)
                if (cover[S0] == ALL) f[S] = max(f[S], f[S ^ S0] + 1);
        }
        printf("Case %d: %d\n", kase, f[ALL]);
    }
    return 0;
}

 

uva11825

标签:code   for   turn   计算   题意   ace   ons   eof   ase   

原文地址:http://www.cnblogs.com/yohanlong/p/7762506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!