2436 Disease Management

概要

1<=D<=15種類の病気,1<=N<=1000匹の牛がいて,それぞれがいくつか病気にかかっている.
乳搾りをすると病原菌が混ざり合うが,Kまでは混ざってもOK.
最大何匹までokか?

解法

DこのうちK個,混ざってもいい病原体を選んで,全部チェック.
bit combinationの列挙が役に立った.

  // bit combination
  // comb(N, K)
  int N, K;
  for(int comb = (1 << K) - 1; comb < (1 << N); ) {
    // ...
    int x = comb & -comb, y = comb + x;
    comb = (((comb & ~y) / x) >> 1) | y;
  }