uva11825

Posted yohanlong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uva11825相关的知识,希望对你有一定的参考价值。

题意是将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的主要内容,如果未能解决你的问题,请参考以下文章

题解 $UVA$ 11825$Hackers$' $Crackdown$

UVA11825 Hackers' Crackdown(状压dp)

uva 11825

Uva11825:Hackers' Crackdown

UVa 11825 Hackers' Crackdown (状压DP)

UVA - 11825 Hackers' Crackdown