博弈論入門之巴什博奕

巴什博奕

巴什博奕:php

兩個頂尖聰明的人在玩遊戲,有\(n\)個石子,每人能夠隨便拿\(1-m\)個石子,不能拿的人爲敗者,問誰會勝利html

巴什博奕是博弈論問題中基礎的問題spa

它是最簡單的一種情形對應一種狀態的博弈code

博弈分析

咱們從最簡單的情景開始分析htm

當石子有\(1-m\)個時,毫無疑問,先手必勝blog

當石子有\(m+1\)個時,先手不管拿幾個,後手均可以拿乾淨,先手必敗遊戲

當石子有\(m+2-2m\)時,先手能夠拿走幾個,剩下\(m+1\)個,先手必勝get

咱們不難發現,面臨\(m+1\)個石子的人必定失敗。io

這樣的話兩我的的最優策略必定是經過拿走石子,使得對方拿石子時還有\(m+1\)class

咱們考慮往通常狀況推廣

  • 設當前的石子數爲\(n=k*(m+1)+r\)

先手會首先拿走\(r\)個,接下來假設後手拿走\(x\)個,先手會拿走\(m+1-x\)個,這樣博弈下去後手最終必定失敗

  • 設當前的石子數爲\(n=k*(m+1)\)

假設先手拿\(x\)個,後手必定會拿\(m+1-x\)個,這樣下去先手必定失敗

代碼

#include<cstdio>
int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    if(n % (m+1) !=0) printf("first win");
    else printf("second win");
    return  0;
}

題目

題解

題解

題解

相關文章
相關標籤/搜索