Nim遊戲(一堆 N堆) 博弈

2021-07-11 18:13:04 字數 858 閱讀 4782

alice和bob在玩這樣乙個遊戲:給定k個數字a1,a2…ak。一開始,有x個石子,alice和bob輪流取石子。每次所取石子的個數一定要在a1~ak中。alice先取。取走最後乙個石子的一方獲勝。當雙方都採取最優策略時,誰會獲勝?題目假定a1~ak中一定有1.

可以看成一堆的nim遊戲。

#include#include#include#include#includeusing namespace std;

#define maxn 1010

int x,k,a[maxn];

bool sg[maxn];

void solve()/*9

21 4

*/

alice和bob在玩這樣乙個遊戲:給定k個數字a1,a2…ak。一開始,有n堆石子,每堆各有xi個石子。alice和bob輪流從其中某一堆取一些石子。每次所取石子的個數一定要在a1~ak中。alice先取。取光石子的一方獲勝。當雙方都採取最優策略時,誰會獲勝?題目假定a1~ak中一定有1.

可以看成n堆的nim遊戲。

#include#include#include#include#include#includeusing namespace std;

#define maxn 1010

int n;//n堆

int k;//可取情況的數目

int x[maxn];//n堆分別的數目

int a[maxn];//可取情況

int sg[maxn];//等價於nim中的石子數

void solve()/*3

31 3 4

5 6 8

*/

一堆一堆又一堆 合併果子

題目描述 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消耗的體力等於每次合併所耗...

博弈論 一堆nim博弈合在一起

今天a了張子蘇大神的的題,感覺神清氣爽。一篇對於多層nim博弈講的很透徹的博文 問題1 今有若干堆火柴,兩人依次從中拿取,規定每次只能從一堆中取若干根,可將一堆全取走,但不可不取,最後取完者為勝,求必勝的方法。定義 若所有火柴數異或為0,則該狀態被稱為利他態,用字母t表示 否則,為利己態,用s表示。...

將一堆石子分成多堆 Multi SG 遊戲

這類博弈只需要記住一點,乙個由多個遊戲組成的遊戲sg值為這多個遊戲的sg值異或和。也就是所有對一整個nim遊戲它的sg值即為每一小堆的sg的異或和。hdu 5795 這題就是可以選擇把一堆石子分成3堆。通過上述方法,只需要打表找出規律即可。include include include using ...