집합 동태 기획

1604 단어
지역 경기의 제목이 잘 안 지워지고 기초가 약한 특징을 감안하여 백서를 지워라...흑서는 아직 전혀 보지 못했다
#include <iostream>
#include <stdio.h>
using namespace std;
#include <string.h>
int k[20],cover[(1<<16)+1],f[(1<<16)+1];

int main()
{
    //freopen("d:\\in.txt","r",stdin);
    int n,t,flag=1;
    scanf("%d",&n);
    while(n!=0)
    {
     t=0;
     memset(k,0,sizeof(k));
     memset(cover,0,sizeof(cover));
     while(t<n)
     {
         int sum,x;
         scanf("%d",&sum);
         for(int i=1;i<=sum;i++)
         {
           scanf("%d",&x);
           k[t]|=1<<x;
         }
         k[t]|=1<<t;
         //printf("k[%d]=%d
",t,k[t]); t++; } long long int s,j; for(s=1;s<(1<<n);s++) { for(j=0;j<=n-1;j++) { if(s&(1<<j)) cover[s]|=k[j]; } //printf("cover[%d]=%d
",s,cover[s]); } memset(f,0,sizeof(f)); for(s=1;s<(1<<n);s++) // { int s0; for(s0=s;s0;s0=(s0-1)&s) // { if(cover[s0]==((1<<n)-1)) { f[s]=max(f[s],f[s^s0]+1); } } //printf("f[%d]=%d
",s,f[s]); } printf("Case %d: %d
",flag,f[(1<<n)-1]); scanf("%d",&n); flag++; } return 0; }
//   0              。

좋은 웹페이지 즐겨찾기