2436:Disease Management

keyword

BruteForce C++

概要

飼っているN(<1000)匹の牛がかかっている病気の種類(<15)が与えられる。そのうちK種類の病気を選んで無効にできる。病気から回復させられる牛の最大数を求める問題。
病気の種類が少ないので全探索する。計算量は最大でも(15,7)*1000なので余裕。

int main(){
    int ns[1004], n, m, i, j, mask, d, k, x, best, cnt;

    scanf("%d%d%d",&n,&d,&k);
    REP(i,n){
        mask = 0;
        scanf("%d",&m);
        REP(j,m){
            scanf("%d",&x);
            mask |= 1<<(x-1);
        }
        ns[i] = mask;
    }

    best = 0;
    REP(mask,1<<d)if(__builtin_popcount(mask)==k){
        cnt = 0;
        REP(i,n)if(!(ns[i] & (~mask)))cnt++;
        best = max(best, cnt);
    }

    printf("%d\n",best);

    return 0;
}