博弈問題:(1)、對於必勝狀態,一定有乙個後繼是必敗的;
(2),對於必敗狀態,它的所有後繼是必勝的;
巴什博奕:
1、 本遊戲是乙個二人遊戲;
2、 有一堆石子一共有n個;
3、 兩人輪流進行;
4、 每走一步可以取走1…m個石子;
5、 最先取光石子的一方為勝;
如果遊戲的雙方使用的都是最優策略,請輸出哪個人能贏。
巴什博奕可以用sg函式來推導,但是時間複雜度太高。可以直接將其轉化為n = k*(m+1) + r; 如果 r > 0, 則先手一定會贏
簡單的巴什博奕題目 hdu1846;
sg函式能過
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define max 1010
#define inf int_max
#define eps 1e-6
#define rep(i,n) for (int i=0; i<(n); i++)
#define for(i,s,t) for (int i=(s); i<=(t); i++)
using namespace std;
int vis[max],sg[max];
int main()
for (int j=0; ; j++)
}} if (sg[n] == 0) printf("second\n");
else printf("first\n");
} return 0;
}
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define max 1000
#define inf int_max
#define eps 1e-6
#define rep(i,n) for (int i=0; i<(n); i++)
#define for(i,s,t) for (int i=(s); i<=(t); i++)
using namespace std;
int main()
else printf("first\n");
}return 0;
}
威佐夫博奕:
問題描述:有兩堆石子,數量任意,可以不同。遊戲開始由兩個人輪流取石子。遊戲規定,每次有兩種不同的取法,一是可以在任意的一堆中取走任意多的石子;二是可以在兩堆中同時取走相同數量的石子。最後把石子全部取完者為勝者。現在給出初始的兩堆石子的數目,如果輪到你先取,假設雙方都採取最好的策略,問最後你是勝者還是敗者。
判斷當前狀態必敗狀態的依據:為必敗態,當且僅當a = (i*(1+sqrt(5) / 2)(向下取整) ,b = a + i;
poj1067簡單的威佐夫博奕;
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define ll long long
#define max 1000
#define inf int_max
#define eps 1e-8
using namespace std;
int main()
else printf("1\n");
} return 0;
}
尼姆博奕:
問題描述:有n堆火柴,數量分別為a,b,c,d,,,,每次可以從任意一堆中至少拿走一根,也可以去全部拿走,但不能從多根火柴中同時拿。無法拿火柴的遊戲者輸。
解法:l.bouton定理:如果a xor b xor c xor d ,,, = 0,則先受敗,否則先手勝。
簡單的尼姆博奕poj 2234;
#include#include#include#include#include#include#include#include#include#include#include#include#include#include#define max 1010
#define inf int_max
#define eps 1e-6
#define rep(i,n) for (int i=0; i<(n); i++)
#define for(i,s,t) for (int i=(s); i<=(t); i++)
using namespace std;
int main(){
int m,a;
while(scanf("%d",&m) != eof){
int res = 0;
for (int i=0; i
三種博弈想法
取石子問題 有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲,別看這遊戲極其簡單,卻蘊含著深刻的數學原理。下面我們來分析一下要如何才能夠取勝。一 巴什博奕 bash game 只有一堆n個物品,兩...
三種博弈問題
一 巴什博弈 bash game 只有一堆n個物品,兩個人輪流從這堆物品中取物,規定每次至少取乙個,最多取m個。最後取光者得勝。很容易想到當n m 1 0時,先取必勝,第一次先拿走n m 1 以後每個回合到保持兩人拿走的物品總和為m 1即可。這個遊戲還可以有一種變相的玩法 兩個人輪流報數,每次至少報...
演算法 三種博弈問題
有一種很有意思的遊戲,就是有物體若干堆,可以是火柴棍或是圍棋子等等均可。兩個人輪流從堆中取物體若干,規定最後取光物體者取勝。這是我國民間很古老的乙個遊戲,別看這遊戲極其簡單,卻蘊含著深刻的數學原理。下面我們來分析一下要如何才能夠取勝。一 巴什博奕 bash game 只有一堆n個物品,兩個人輪流從這...