老鼠農藥問題(二進位制狀態壓縮)

2022-01-11 14:03:05 字數 658 閱讀 1518

解題思路:

給1000個瓶分別標上如下標籤(10位長度):

0000000001 (第1瓶)

0000000010 (第2瓶)

0000000011 (第3瓶)

......

1111101000 (第1000瓶)

從編號最後1位是1的所有的瓶子裡面取出1滴混在一起(比如從第一瓶,第三瓶,。。。裡分別取出一滴混在一起)並標上記號為1。以此類推,從編號第一位是

1的所有的瓶子裡面取出1滴混在一起並標上記號為10。現在得到有10個編號的混合液,小白鼠排排站,分別標上10,9,。。。1號,並分別給它們灌上對

應號碼的混合液。24小時過去了,過來驗屍吧:

從左到右,死了的小白鼠貼上標籤1,沒死的貼上0,最後得到乙個序號,把這個序號換成10進製的數字,就是有毒的那瓶水的編號。

檢驗一下:假如第一瓶有毒,按照0000000001

(第1瓶),說明第1號混合液有毒,因此小白鼠的生死符為0000000001(編號為1的小白鼠掛了),0000000001二進位制標籤轉換成十進

制=1號瓶有毒;假如第三瓶有毒,0000000011

(第3瓶),第1號和第2號混合液有毒,因此小白鼠的生死符為00000011(編號為1,2的鼠兄弟掛了),0000000011二進位制標籤轉換成十進

制=3號瓶有毒。

二進位制狀態壓縮

二進位制狀態壓縮,即將乙個長度為m的bool陣列用乙個m位的二進位制數來表示和儲存 操作運算 取出整數n在二進位制表示下的第k位 n k 1 取出整數n在二進位制表示下的第0 k 1位 後 k 位 n 1 取出整數n在二進位制表示下的第k位取反 n xor 1 取出整數n在二進位制表示下的第k位賦值...

Sleep Buddies (二進位制狀態壓縮)

演算法 狀態壓縮,把每乙個集合都壓縮成乙個數字。使用方法 把每個狀態都進行1 ac code 1 include 2 using namespace std 3 typedef long long ll 4 const int maxn 1e5 10 5 define rep i,first,las...

總結 二進位制狀態壓縮

目錄 二 二進位制狀態壓縮的操作 三 具體應用 1.定義 二進位制狀態壓縮,是指將乙個長度為 m 的 bool 型別陣列用乙個二進位制下有 m 位的整數表示並儲存的方法。2.應用範圍 二進位制狀態壓縮是狀態壓縮動態規劃,寬度優先搜尋狀態壓縮優化的重要基礎。我們在構建程式時一定要注意 在 m 位二進位...