博弈論-Bash博弈
阿新 • • 發佈:2019-01-02
1.開始了博弈論的學習。首先談一下最簡單的Bash博弈。Bash博弈是這樣的:兩個人,n個物品,每個人每次都可以取走1-m個物品,取走最後一個物品的人勝利。問先手在什麼條件下必勝。
2.題目連結。首先給出一個Bash的題目,滿足Bash的時候,其實先手必勝的情況很好確定。我們直接給出程式碼,在一起來理解一下為什莫是這樣的。
#include"stdafx.h" #include<iostream> #pragma warning(disable:4996) using namespace std; /** Bash gaame: (1)二人遊戲 (2)n個物品 (3)每個人能夠取走1-m個物品 (4)取走最後一個物品的取勝 (5)如果n%(m+1)==0,這個時候先手必敗。否則先手必勝。 */ int main() { int T; scanf("%d", &T); int n, m; for (int i = 0; i < T; i++) { scanf("%d%d", &n, &m); if (n % (m + 1) == 0) { cout << "second" << endl; } else { cout << "first" << endl; } } return 0; }
Bash博弈先手必敗的條件就是n%(m+1)==0,我們來分析一下這個情況。首先假設n=m+1,這個時候無論先手第一次拿多少個,由於剩下的物品數量一定是小於等於m的,所以後手一定可以一次拿完。所以這個時候先手必敗。如果n是m+1的倍數,其實也很簡單的,因為無論先手一次拿多少個物品,後手總是可以做出這樣的策略:拿的物品和先手加在一起恰好是m+1個,這樣若干回合之後哦一定又會回到我們說的第一種情況,先手必敗。所以結論得證。