博弈結論記錄

2021-08-22 10:16:10 字數 1920 閱讀 4403

一、巴什博奕:

只有一堆n個物品,兩個人輪流從中取物,規定每次最少取乙個,最多取m個,最後取光者為勝。

結論:

見**

#include #include #include #include #define fre() freopen("in.txt","r",stdin)

using namespace std;

int n,m;

int main()

return 0;

}

二、威佐夫博弈:

有兩堆各若干的物品,兩人輪流從其中一堆取至少一件物品,至多不限,或從兩堆中同時取相同件物品,規定最後取完者勝利。

結論:

兩堆物品的數量各是a、b,則令k = abs(b - a),t = min(a,b),計算temp = (sqrt(5.0)+1)/ 2.0,如果k * temp = t,則先手輸,反之先手贏。

#include #include #include #include #define fre() freopen("in.txt","r",stdin)

using namespace std;

const int maxn = 1e4;

int a,b;

int main()

return 0;

}

三、尼姆博奕:

有任意堆物品,每堆物品的個數是任意的,雙方輪流從中取物品,每一次只能從一堆物品中取部分或全部物品,最少取一件,取到最後一件物品的人獲勝。

結論:

把所有堆得物品的個數連續求異或(^運算),如果結果為0,先手輸,不為0時,先手贏。

例題:hdu2176

當序列的連續異或值為k(k != 0)時,假設其中的某個元素a,當a > a ^ k 時,將a改為a^k,可以使序列的異或值變為0。

#include #include #include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

typedef long long ll;

const int maxn = 200000;

int buf[maxn];

int main()

if(temp == 0)

printf("no\n");

else}}

return 0;

}

四、斐波那契博弈:

有一堆物品,兩人輪流取物品,先手最少取乙個,至多無上限,但不能把物品取完,之後每次取的物品數不能超過上一次取的物品數的二倍且至少為一件,取走最後一件物品的人獲勝。

結論

先手勝利當且僅當這堆物品的數目不是斐波那契數列中的數字。(該類問題可以打表解決)

例題hdu-2516

#include #include #include #include #include #include #define inf 0x3f3f3f3f

using namespace std;

typedef long long ll;

const int maxn = 100000;

ll buf[maxn];

sets;

void init()

}int main()

return 0;

}

簡單博弈結論

最少取1個,最多取m個,沒石子可取的人輸 若 n mod m 1 0 則先手必勝 沒石子可取的人輸 異或和!0,則先手必勝。否則先手必敗 最終把石子取光的人輸 分類討論 全為1 偶數堆則先手必勝 不全為1 異或和!0,則先手必勝 沒法再推的人輸 選奇數字置nim 奇 偶相當於拿走。偶 奇,先手再把同...

博弈論結論

1.巴什博奕 問題模型 只有一堆n個物品,兩個人輪流從這堆物品中取物品,規定每次至少取乙個,最多取m個,最後取光者得勝。結論 n m 1 0先手必敗.否則先手必勝 變形 條件不變,改為最後取光的人輸。結論 n 1 m 1 0 先手必敗,否則必勝 2.威佐夫博奕 問題模型 有兩堆各若干個物品,兩個人輪...

隨筆5 威佐夫博弈和貝亞蒂定理 結論記錄

博弈論之威佐夫博弈 威佐夫博弈 wythoff game 有兩堆各若干個物品,兩個人輪流從任一堆取至少乙個或同時從兩堆中取同樣多的物品,規定每次至少取乙個,多者不限,最後取光者得勝。結論 如果兩個人都採用正確操作,那麼面對非奇異局勢,先拿者必勝 反之,則後拿者取勝。那麼任給乙個局勢 a,b 怎樣判斷...