nim博弈
題意:有m堆牌,兩個人先後取某堆中的任意(不少於一)張牌,最後取完者勝;問先手取勝第一次取牌有多少種取法。
思路:1)如若給出 的是必敗狀態:a1^a2^......^an=0,則先手不會有任何可能獲得勝利;
2)若給出的是必勝狀態:a1^a2^.......^an=k,(其中k不為零),那麼我們的目的是要把必勝狀態
轉化為必敗狀態從
而使得先手
勝利。若a1^a2^...^an!=0,一定存在某個合法的移動,將ai
改變成ai'後滿足
a1^a2^...^ai'^...^an=0。若a1^a2^...^an=k,則一定存在某個ai,
它的二進位制
表示在k的最高位上是1(否則k的最高位那個1是怎麼得到的)。這時
ai^k
成立。則
我們可以將ai改變成
ai'=ai^k
,此時a1^a2^...^ai'^...^an=a1^a2^...^an^k=0。
#includeusing namespace std;
int main()
if(ans==0) cout<<"0\n";
else
cout<}
}return 0;
}
尼姆博弈 (附 HDU1850)
尼姆博弈 有三堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取乙個,多者不限,最後取光者得勝。這種情況與二進位制有著很大的關係,我們用 a,b,c 來表示某種局勢,那麼 0,0,0 必然為奇異局勢,0,n,n 也是種奇異局勢 因為如果對手在其中一堆取m個石子 m n 那麼你也可以在另...
HDU1850 尼姆博弈求可行方案數目
題型 尼姆博弈模型,大致上是這樣的 有3堆各若干個物品,兩個人輪流從某一堆取任意多的物品,規定每次至少取1個,多者不限,最後取光者得勝。分析 1 首先自己想一下,就會發現只要最後剩兩堆物品一樣多 不為零 第三堆為零,那面對這種局勢的一方就必敗 那我們用 a,b,c 表示某種局勢,首先 0,0,0 顯...
博弈 尼姆博弈
今天我們來聊一聊另一種博弈 尼姆博弈,這一種博弈可以說是巴什博弈的一種變體,巴什博弈中 石子 的堆數為1堆,而在利姆博弈中 石子 的堆數為n堆,還有在尼姆博弈中取石子的規則也發生了變化,前一種博弈中取石子的數量限定在 1,l 而後一種取石子的數量可以為任意數 但不能不取,而且還不能超過這一堆石子的總...