1. 程式人生 > >博弈論之威佐夫博奕

博弈論之威佐夫博奕

威佐夫博奕

母題:有兩堆各若干個物品,兩個人輪流從某一堆或同時從兩堆中取同樣多的物品,規定每次至少取一個,多者不限,最後取光者得勝。
這是一個公式,記住就好了,我也沒找到有關的證明,只在百度百科中找到一段簡短的介紹:

我們用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示兩堆物品的數量並稱其為局勢,如果甲面對(0,0),那麼甲已經輸了,這種局勢我們稱為奇異局勢。前幾個奇異局勢是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。
可以看出,a0=b0=0,ak是未在前面出現過的最小自然數,而 bk= ak + k。

這個問題我覺得用SG函式可能更好理解,不過現在我們可以把威佐夫博奕的公式記一下:,滿足這個公式的就是後手必勝,否則先手必勝
附上我的模板:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m)) {
        int temp=((max(n,m)-min(n,m))*(1+sqrt(5))/2);
        if(temp==min(n,m)) printf("後手勝\n");
        else
printf("先手勝\n"); } return 0; }

做一道例題練習一下吧:
HDU 1527
Problem Description
有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。

Input
輸入包含若干行,表示若干種石子的初始情況,其中每一行包含兩個非負整數a和b,表示兩堆石子的數目,a和b都不大於1,000,000,000。

Output
輸出對應也有若干行,每行包含一個數字1或0,如果最後你是勝者,則為1,反之,則為0。

Sample Input
2 1
8 4
4 7

Sample Output
0
1
0

AC程式碼:

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    while(~scanf("%d%d",&n,&m)) {
        int temp=((max(n,m)-min(n,m))*(1+sqrt(5))/2);
        if(temp==min(n,m)) printf("0\n");
        else printf("1\n");
    }
    return 0;
}

相關推薦

博弈論

威佐夫博奕 母題:有兩堆各若干個物品,兩個人輪流從某一堆或同時從兩堆中取同樣多的物品,規定每次至少取一個,多者不限,最後取光者得勝。 這是一個公式,記住就好了,我也沒找到有關的證明,只在百度百科中找

HDU 5973 Aninteresting game (Wythoff Game)

== targe scanner rgs void 威佐夫 pre static div HDU 5973:http://acm.hdu.edu.cn/showproblem.php?pid=5975 題意:   有兩堆石子,每次可以從一堆石子中取任意個,或者從兩堆石子

2177 取(2堆)石子游戲 (

題目: Description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同

模板

https://www.cnblogs.com/chenhuan001/p/5735165.html   //威佐夫博奕:有兩堆各若干個物品,兩個人輪流從某一堆或同時從兩堆中取同樣多的物品,規定每次至少取一個,多者不限,最後取光者得勝。 //輸入:兩堆大小 //返回:0

取石子游戲(

有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最

51Nod 1072:遊戲 (

基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題  收藏  關注 有2堆石子。A B兩個人輪流拿,A先拿。每次可以從一堆中取任意個或從2堆中取相同數量的石子,但不可不取。拿到最後1顆石子的人獲勝。假設A B都非常聰明,拿石子的過程中不會出

NYOJ 837 Wythoff Game(公式利用)

 Wythoff Game 時間限制:1000 ms  |  記憶體限制:65535 KB 難度:1 描述 最近ZKC同學在學博弈,學到了一個偉大的博弈問題--威佐夫博弈。 相信大家都學過了吧

51nod oj 1072 遊戲 1185 遊戲 V2【

威佐夫博奕(Wythoff Game):有兩堆各若干個物品,兩個人輪流從某一堆或同 時從兩堆中取同樣多的物品,規定每次至少取一個,多者不限,最後取光者得勝。     這種情況下是頗為複雜的。我們用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示 兩堆物品的數量並稱其為局勢,如果甲面對(0,0

博弈論入門博弈

威佐夫博弈 威佐夫博弈是一類經典的博弈問題 有兩堆石子,兩個頂尖聰明的人在玩遊戲,每次每個人可以從任意一堆石子中取任意多的石子或者從兩堆石子中取同樣多的石子,不能取得人輸,分析誰會獲得勝利 博弈分析 威佐夫博弈不同於Nim遊戲與巴什博奕,它的特殊之處在於不能將兩堆石子分開分析。 前輩們在對該博弈遊戲做了大

POJ1067博弈

主要求出當前是不是奇異局勢就好啦~ 要用到黃金分割~ 程式碼: #include <cstdio> #include <cstring> #include <

博弈論知識點總結(巴什 博弈 尼姆博弈 SG()函式介紹)

總結 真心感謝博主,終於知道為什麼尼姆博弈用異或來解決。 SG函式模板: void init()//根據題目要求進行修改 { a[0]=1; for(int i=1;i<=32;i

博弈論(巴什博弈,尼姆博弈,斐波那契博弈)

一.  巴什博奕(Bash Game):   A和B一塊報數,每人每次報最少1個,最多報4個,看誰先報到30。這應該是最古老的關於巴什博奕的遊戲了吧。 其實如果知道原理,這遊戲一點運氣成分都沒有,只和先手後手有關,比如第一次報數,A報k個數,那麼B報5-k個數,那麼B報數之

NIM遊戲,NIM遊戲變形,博弈以及巴什總結

經典NIM遊戲:    一共有N堆石子,編號1..n,第i堆中有個a[i]個石子。 每一次操作Alice和Bob可以從任意一堆石子中取出任意數量的石子,至少取一顆,至多取出這一堆剩下的所有石子。 兩個人輪流行動,取走最後一個的人勝利。Alice為先手。 我們定義: P:表示當前局面下先手必敗 N

三大經典博弈 尼姆 + 巴仕博弈 + 博弈 +SG函式

第一,尼姆博奕(Nimm Game) 一,特例分析 有三堆各若干個物品,兩個人輪流從某一堆取任意多的 物品,規定每次至少取一個,多者不限,最後取光者得勝。 我們用(a,b,c)表示某種局勢,首先(0,

POJ1067 取石子遊戲 博弈 博弈論

輸出 策略 open splay 整數 aps .com targe 一是 http://poj.org/problem?id=1067 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是

博弈論-博弈

輸出 否則 size 條件 hit ron 不定 規律 -- 理論分析 問題:首先有兩堆石子,博弈雙方每次可以取一堆石子中的任意個,不能不取,或者取兩堆石子中的相同個。先取完者贏。 分析:首先我們根據條件來分析博弈中的奇異局勢 第一個(0 , 0),先手輸,當遊戲某一方

51Nod1072 遊戲(博弈論的黃金分割理論)

這道題主要考博弈論的Wythoff Game的黃金分割理論:有一個推論,k=b-a,如果a=k*黃金分割數,則當前局勢為奇異局,既先手必輸。 ps:黃金分割數:(根號5+1)/2 #include&

ACM-博弈取石子游戲——hdu1527

所謂威佐夫博弈,是ACM題中常見的組合遊戲中的一種,大致上是這樣的: 有兩堆石子,不妨先認為一堆有 10,另一堆有 15 個,雙方輪流取走一些石子,合法的取法有如下兩種: 1、在一堆石子中取走任意多顆; 2、在兩堆石子中取走相同多的任意顆; 約定取走最後一顆石子的人為贏家,求必勝策略。 兩堆石頭地位是一樣

51NOD 1185 遊戲 V2(博弈論 + 減少精度)

傳送門 有2堆石子。A B兩個人輪流拿,A先拿。每次可以從一堆中取任意個或從2堆中取相同數量的石子,但不可不取。拿到最後1顆石子的人獲勝。假設A B都非常聰明,拿石子的過程中不會出現失誤。給出2堆石子

博弈論——兩人取子游戲與博弈,隱藏在背後的黃金分割

本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是**演算法和資料結構專題**第25篇文章,我們繼續博弈論專題。 在上一篇文章當中我們瞭解了最簡單的巴什博奕,今天我們來看看另一個經典的博弈模型——**威佐夫博弈**。博弈論和機器學習有些類似,數學家們針對場景進行建模,設計出