1. 程式人生 > >博弈論-Bash博弈

博弈論-Bash博弈

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個,這樣若干回合之後哦一定又會回到我們說的第一種情況,先手必敗。所以結論得證。