博弈訓練 nim與bash

2021-07-11 06:04:05 字數 2500 閱讀 9384

本文主要記錄和nim博弈,bash game的相關問題。題目:

hdu 2188 悼念512汶川大**遇難同胞——選拔志願者

hdu 2149 public sale

lightoj 1253 misere nim

lightoj 1247 matrix game

hdu 1517 a multiplication game

大意:二人捐款,每次捐款的錢數是1-m,誰先捐**到或大於n的人勝利

分析:數量狀態

勝利者1⟶m

grass

m+1rabbitm+

2⟶2m

+1grass

2m+2

rabbit2m

+3⟶3

m+2 grass

3m+3

rabbit

code:

#include 

#include

using

namespace

std;

int main()

return

0;}

大意:兩個人**競爭一塊土地,每一次出錢有乙個限度。求解如果第乙個人勝利,他需要在第一次出的錢。

分析:如果第乙個人能夠保證差價剩下k*(m+1),那麼最後的競價次數一定能控制剛好等於k。

code:

#include 

#include

using

namespace

std;

int main()

else }}

return

0;}

大意:和普通的nim遊戲相比這裡是先拿完物品的人輸。單純的討論必然思考各種複雜的情況,現在我們轉化它成一般性的nim遊戲。

nim game 誰先拿完誰就贏 最後的權利在我的手上,只要n>1,我就能剩下1,保證我贏。

如果全是1,那就依據單純的奇偶性判斷,奇數贏,偶數輸(全部針對先手而言)

code:

#include 

#include

#include

#include

using

namespace

std; // vim game 誰先拿完誰就贏 最後的權利在我的手上,只要n>1,我就能剩下1

int main()

if(one==n)

if(ans==0) printf("case %d: bob\n",ca++);

else

printf("case %d: alice\n",ca++);

}return

0;}

大意:在乙個n×m的矩陣中每個格仔有一些石子。兩人玩遊戲,每乙個人一次可以選擇一行,任意取不少於1個石子,取完最後乙個石子的人贏。

分析:nim遊戲的簡單變形,只要將一行變成乙個數字就行。

code:

#include 

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

ll s[60];

int main()

ans=ans^s[i];

}if(ans) printf("case %d: alice\n",ca++);

else

printf("case %d: bob\n",ca++);

}return

0;}

範圍贏家

2–9s

9+1⟶

2*9o2*9+1

⟶ 2*9*9

s2*9*9+1

⟶ 2*9*9*2

o2*9*9*2+1

⟶ 2*9*9*2*9s

對於乙個給定的數字n可以直接由上表確定輸家和贏家。用浮點數!

code:

#include 

#include

#include

#include

#include

using

namespace

std;

int main()

if(n<=9) puts("stan wins.");

else

puts("ollie wins.");

}return

0;}

關於這題記錄一次靈異事件:

對比:

Nim博弈與Anti Nim博弈

nim博弈的原題 問題1 今有若干堆火柴,兩人依次從中拿取,規定每次只能從一堆中取若干根,可將一堆全取走,但不可不取,最後取完者為勝,求必勝的方法。定義 若所有火柴數異或為0,則該狀態被稱為利他態,用字母t表示 否則,為利己態,用s表示。注意 這篇博文是先定義s和t,再通過它們的性質推出結論。定理1...

博弈模板(bash,威佐夫,Nim)

寫一些博弈模板,借用51nod上的題目 bash遊戲 有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次最少拿1顆,最多拿k顆,拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n和k,問最後誰能贏得比賽。include using namespace std int...

Nim遊戲與階梯Nim博弈

問題描述 一共有n堆石子,編號1 n,第i堆中有個a i 個石子。每一次操作alice和bob可以從任意一堆石子中取出任意數量的石子,至少取一顆,至多取出這一堆剩下的所有石子。兩個人輪流行動,取光所有石子的一方獲勝。aice為先手.給定a,假設兩人都採用最優策略,誰會獲勝?問題分析 從簡單情況分析,...