POJ 2436 二进制枚举

题意:
这里写图片描述
这里写图片描述
思路:
拆成二进制枚举 有哪个病毒在 判一判 就好了

//By SiriusRen
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int n,d,k,jy,xx,a[1005],tmp[1005],ans;
int main(){
    scanf("%d%d%d",&n,&d,&k);
    for(int i=1;i<=n;i++){
        scanf("%d",&jy);
        while(jy--){
            scanf("%d",&xx);
            a[i]|=1<<(xx-1);
        }
    }
    for(int i=0;i<(1<<d);i++){
        int cnt=0,std=0,all=0;
        for(int j=0;j<d;j++)
            if(i&(1<<j))cnt++,std|=(1<<j);
        if(cnt!=k)continue;
        memcpy(tmp+1,a+1,n*4);
        for(int j=1;j<=n;j++){
            tmp[j]=(tmp[j]|std)-i;
            if(!tmp[j])all++;
        }
        ans=max(ans,all);
    }
    printf("%d
",ans);
}

这里写图片描述

原文地址:https://www.cnblogs.com/SiriusRen/p/6532229.html