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

博弈論入門之威佐夫博弈

威佐夫博弈

威佐夫博弈是一類經典的博弈問題

有兩堆石子,兩個頂尖聰明的人在玩遊戲,每次每個人可以從任意一堆石子中取任意多的石子或者從兩堆石子中取同樣多的石子,不能取得人輸,分析誰會獲得勝利

博弈分析

威佐夫博弈不同於Nim遊戲與巴什博奕,它的特殊之處在於不能將兩堆石子分開分析。

前輩們在對該博弈遊戲做了大量的探索之後最終找到了一些非常有意思的性質

下面的內容不想看的可以跳過直接看結論,其實也沒啥亂用233,這部分就是為了拓寬視野的

定義先手必輸的局勢為奇異局勢,前幾個奇異局勢為\((0,0),(1,2),(3,5),(4,7),(6,10) \dots\)

假設\((x,y)\)為第\(k\)

個奇異局勢

性質:

  1. \(x\)為前\(1 \dots k\)個奇異局勢中沒有出現過的最小正整數,\(y=x+k\)

打表找規律

  1. 任何一個自熱數都包含在一個且僅有一個奇異局勢中

感覺網上證的都不靠譜,那隻好讓本蒟蒻親自下手嘍

證明這個結論,我們只需要證明兩點:(1)任意自然數都出現過(2)任意自然數僅出現一次

對於(1):反證法,設\(v\)這個數沒有出現過,那麼\(v\)可以做一個新的奇異局勢的\(x\)

對於(2): 反證法

假設數\(v\)出現了兩次,那麼\(v\)一定不是所在奇異局勢的\(x\)(\(x\)必須之前未出現)

那麼\(v\)只能同時是兩個奇異局勢的\(y\),又因為任意一個奇異局勢的差值不相同,因此\(v\)

不可能出現兩次

  1. 任何操作都會將奇異局勢變為非奇異局勢

若取走一堆中的石子,那麼兩對石子的差值會改變,必將成為非奇異局勢

若同時取走,因為同一個差值只會對應一種奇異局勢,必將成為非奇異局勢

  1. 可以採取適當的方法將非奇異局勢變為奇異局勢

顯然

結論

人們通過對上述性質的探索,同時結合Betty定理,給出了威佐夫博弈的重要結論

假設兩堆石子為\((x,y)\)(其中\(x<y\)

那麼先手必敗,當且僅當

\((y-x)*\frac{(\sqrt{5}+1)}{2}=x\)

其中的\(\frac{(\sqrt{5}+1)}{2}\)實際就是\(1.618\),黃金分割數!怎麼樣,博弈論是不是很神奇?

證明的話,

首先你要會證明Betty定理,連結在上面,如果度孃的證明看不懂可以看這裡

威佐夫博弈結論的話可以看這裡

程式碼

題目

#include<cstdio>
#include<algorithm>
#include<cmath>
#define int long long 
using namespace std;
main()
{
    int a,b;
    scanf("%lld%lld",&a,&b);
    if(a>b) swap(a,b);
    int temp=abs(a-b);
    int ans=temp*(1.0+sqrt(5.0))/2.0;
    if(ans==a) printf("0");
    else       printf("1");
    return 0;
}

例題

題解

題解

相關推薦

博弈論入門博弈

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

POJ1067博弈

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

POJ1067 取石子遊戲 博弈 博弈論

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

博弈論-博弈

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

博弈論知識點總結(巴什博奕 博弈 尼姆博弈 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報數之

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

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

博弈論博奕

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

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

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

洛谷P2252 取石子遊戲(博弈)

5.0 兩種 條件 你是 string 初始 個數 取石子遊戲 一是 題目背景 無 題目描述 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最

HDU 1527 取石子遊戲(博弈)

blog swa get 全部 sample 輸出 你是 for 到你 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s

51NOD 1185 遊戲 V2(博弈)

過程 question 個數 ima gpo char ont emp IT 1185 威佐夫遊戲 V2 基準時間限制:1 秒 空間限制:131072 KB 分值: 0 難度:基礎題 收藏 關註 有2堆石子。A B兩個人輪流拿,

HDU 1527 取石子遊戲(博弈

其中 main AC strong 大於 ron center bmi Go 取石子遊戲 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su

HDU - 5973 Game of Taking Stones (博弈 高精度)

-a span side 模板 multi amount 公式 native str 題目描述: Two people face two piles of stones and make a game. They take turns to take stones. As

HDU2177 取(2堆)石子遊戲(博弈

代碼 mat swap 輸出 tor pro pri 取石子 desc HDU2177 取(2堆)石子遊戲 Problem Description 有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的

BZOJ3298: [USACO 2011Open]cow checkers 博弈

棋盤 swap 左移 不知道 位置 nbsp bzoj solution 整數 Description 一天,Besssie準備和FJ挑戰奶牛跳棋遊戲。這個遊戲上在一個M*N的棋盤上, 這個棋盤上在(x,y)(0<=x棋盤的左下角是(0,0)坐標,棋盤的右上角

2016年ACM/ICPC大連賽區 C題(JAVA高精度求sqrt(5)+博弈

題目連結:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=5747 題意:除了資料範圍為10^100次方以外

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

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

HDU - 5973 Game of Taking Stones 博弈+高精度

威佐夫博弈的模板題 判斷(√5-1)/2 *(b-a)是否和a相等 但是資料很大,用Java開了高精度,二分求√5的值 import java.util.*; import java.math.*; public class Main { public static void

【HDOJ5973】Game of Taking Stones(Java,博弈

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