次の問題を考えてみましょう。
1からNまでの番号が付けられたN枚のコインがあります。
あなたはそれらを見ることができませんが、次の形式のそれらについてのMの事実が与えられます:
struct Fact
{
set<int> positions
int num_heads
}
positions
コインのサブセットを識別し、num_heads
そのサブセット内のヘッドであるコインの数です。
これらのMの事実を考えると、おそらく存在する可能性のあるヘッドの最大数を計算する必要があります。
この問題はNP完全ですか?はいの場合、削減は何ですか?いいえの場合、多項式時間解とは何ですか?
例えば:
N = 5
M = 3
fact1 = { {1, 2}, 1 } // Either coin 1 or coin 2 is a head
fact2 = { {4}, 0 } // Coin 4 is a tail
fact3 = { {2, 4, 5}, 2 } // Out of coins 2, 4 and 5, two are heads
事実に一致するヘッドが最も多い構成は次のとおりです。
T H H T H
したがって、答えは3つの頭です。