1、巴什博弈
/*
hdu 1846
題目大意:
有一堆石子一共有n個,兩人輪流進行取石子,每走一步可以取走1…m個石子,最先取光石子的一方為勝;
如果遊戲的雙方使用的都是最優策略,請輸出哪個人能贏。
input
輸入資料首先包含乙個正整數c(c<=100),表示有c組測試資料。
每組測試資料佔一行,包含兩個整數n和m(1<=n,m<=1000),n和m的含義見題目描述。
output
如果先走的人能贏,請輸出「first」,否則請輸出「second」,每個例項的輸出佔一行。
sample input
223 2
4 3sample output
first
second
*******************************
巴什博弈,當n % (m+1) == 0時,必敗! */
#include using namespace std;
int c, n, m;
int main()
return 0;
}
2、斐波拉契博弈
/*
題目描述
幼兒園開學了,為了讓小盆友們能盡可能的多的享受假期。校長大人決定讓小盆友分批到校,至於每批學生來多少人由乙個小傻子和乙個小仙女
負責,兩個人輪番負責,校長會在最後的時候去檢視工作進度,小傻子不想被別人嘲笑自己傻,小仙女要證明自己比小傻子聰明。所以她們回去爭搶安排最後一名小盆友。每次安排的小盆友至少為1,至多為上一次安排的2倍。小仙女搶到了先手的機會。第一次安排小盆友不能直接安排所有的小盆友一起回校。
輸入描述:
單組測試資料輸入乙個整數n,n代表小盆的個數(n>=2&&n<=1e9)
輸出描述:
輸出獲勝人的名字——「xian」或者「sha」輸入3
輸出sha
說明(fisrt)1 -> (second) 2 || 2 - > 1
無論小仙女先送乙個還是兩個都會被小傻子獲勝輸入4
輸出xian
說明1 -> 2 -> 1 || 1 -> 1 -> 2
小仙女先送乙個,小傻子無論送乙個或者兩個都會被小仙女取勝。
*/#include using namespace std;
int main()
if(tag == 1)
cout << "sha";
else
cout << "xian";
return 0;
}
3、威佐夫博弈
/*
hdu2516
description
有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;
二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,
問最後你是勝者還是敗者。
input
輸入包含若干行,表示若干種石子的初始情況,其中每一行包含兩個非負整數a和b,
表示兩堆石子的數目,a和b都不大於1,000,000,000。
output
輸出對應也有若干行,每行包含乙個數字1或0,如果最後你是勝者,則為1,反之,則為0。
sample input
2 18 4
4 7sample output01
0*/#include #include using namespace std;
int main()
if(sum == 0)
for(int i = 0; i < n; i++)
if((sum^a[i]) <= a[i]) ans++;
cout << ans << endl;
}return 0;
}
博弈論入門總結
根據遊戲規則無法再進行行動者為負。就是將各個子遊戲的sg值進行異或,不為零則初始為n態 先手必勝 比如抓石子遊戲,sg i i。取走最後乙個石子者為負。終止態為n態 先手必勝當且僅當 1.所有堆的石子數都為1,且遊戲的sg值為0 此時退化為簡單的奇偶處理 2.存在石子數大於1的堆,且遊戲的sg值不為...
博弈論入門
博弈論 是二人或多人在平等的對局中各自利用對方的策略變換自己的對抗策略,達到取勝目標的理論。博弈論是研究互動決策的理論。博弈可以分析自己與對手的利弊關係,從而確立自己在博弈中的優勢,因此有不少博弈理論,可以幫助對弈者分析局勢,從而採取相應策略,最終達到取勝的目的。一.bash博弈 問題 只有一堆n個...
博弈論入門
參考 三個簡單的博弈論問題 博弈 1066 bash遊戲 原題傳送 有一堆石子共有n個。a b兩個人輪流拿,a先拿。每次最少拿1顆,最多拿k顆,拿到最後1顆石子的人獲勝。假設a b都非常聰明,拿石子的過程中不會出現失誤。給出n和k,問最後誰能贏得比賽。例如n 3,k 2。無論a如何拿,b都可以拿到最...