尼姆博弈 hdu 1850

2021-08-20 04:12:54 字數 663 閱讀 4596

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 而後一種取石子的數量可以為任意數 但不能不取,而且還不能超過這一堆石子的總...