UVa11825 - Hackers Crackdown

出處:https://onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2925

解題策略:

dp,二進位表示集合

找出集合node[i],i等於0到(n-1),任意取集合node[i]的任意個數的聯集,每個集合node[i]可以使用一次,可以覆蓋所有點的最大次數

將每個電腦相鄰的電腦,轉成二進位表示的數字,node[i]=3,3表示000011,該node[i]集合有點0與點1

任意取node[i]的各種聯集儲存到cover[],例如cover[7],7為111,表示取node[2]、node[1]與node[0]的聯集

列舉集合的所有可能性S,且列舉S的子集到j,陣列result為最後獲得的結果

則若cover[j]等2^n-1,則表示j可以覆蓋所有機器,則dp關係如下,result[S^j]在之前已經求出

result[S] = max(result[S], result[S^j]+1)

其中S^j為S與j的差集,因為j為S的子集