LibreOJ 取石子遊戲 1(巴什博奕)

2021-10-02 11:19:18 字數 664 閱讀 8815

題目鏈結

演算法解析

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

石子有1~m個時,毫無疑問,先手必勝

石子有m+1個時,先手無論拿幾個,後手都可以拿乾淨,先手必敗

我們考慮往一般情況推廣

設當前的石子數為n=k∗(m+1)+r

先手會首先拿走r個,接下來假設後手拿走x個,先手會拿走m+1−x個,這樣博弈下去後手必敗

設當前的石子數為n=k∗(m+1)

假設先手拿x個,後手一定會拿m+1−x個,這樣下去先手必敗

**

#include

#include

#include

using

namespace

std;

intmain()

巴什博奕型別取石子

只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。如果n m 1,那麼無論先手拿走多少個,後手都可以把石子全部拿完,n又可以用乙個公式表示 n m 1 k t,t m 若 t 0,則 n 剛好是 m 1 的整數倍,則無論先手每次拿多少個都會剩餘a m 1 ...

取石子問題 巴什博弈

巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。我們舉幾個例子嘗試後就能發現,當n整除m 1時,假設a拿x顆,b只要拿m 1 x顆,這樣就能保證每次拿完後石子數都能被m 1整除,這樣當最後一次m 1時,無論a怎麼拿,b都能拿...

HDU 1527 取石子遊戲(巴什博弈)

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