威佐夫博弈
2017-03-17 21:10
134 查看
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而
bk= ak + k。
结论:
若两堆物品的初始值为(x,y),且x<y,则另z=y-x;
记w=(int)[((sqrt(5)+1)/2)*z ];
若w=x,则先手必败,否则先手必胜。
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,...,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10)、(8,13)、(9,15)、(11,18)、(12,20)。可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而
bk= ak + k。
结论:
若两堆物品的初始值为(x,y),且x<y,则另z=y-x;
记w=(int)[((sqrt(5)+1)/2)*z ];
若w=x,则先手必败,否则先手必胜。
#include<stdio.h> #include<math.h> #include<iostream> using namespace std; int main() { int n,m,x; while(cin>>n>>m) { if(n>m) swap(n,m); x=floor((m-n)*(1+sqrt(5.0))/2.0); if(x==n) cout<<"后手必胜"<<endl; else cout<<"先手必胜"<<endl; } return 0; }
相关文章推荐
- HDU5973(威佐夫博弈+Java大数)
- 百练_1067取石子游戏(威佐夫博弈)
- HDU 5953 Game of Taking Stones(威佐夫博弈+高精度+二分)——The 2016 ACM-ICPC Asia Dalian Regional Contest
- POJ1067(威佐夫博弈)
- Nim博弈和威佐夫博弈 Return of the Nim
- zcmu-1113取石子游戏(威佐夫博弈)
- poj 1067 取石子游戏(威佐夫博弈)
- POJ 1067 威佐夫博弈(Wythoff Game)问题 (取石子游戏)
- 威佐夫博弈【转】
- hdu 2177 取(2堆)石子游戏(威佐夫博弈)
- poj1067(威佐夫博弈)
- 取(2堆)石子游戏(威佐夫博弈)
- hdu1527取石子游戏 威佐夫博弈
- 取(2堆)石子游戏 - HDU 2177 威佐夫博弈
- 威佐夫博弈 POJ 1067
- 威佐夫博弈
- 博弈论(巴什博弈)(威佐夫博弈)(尼姆博奕)
- 威佐夫博弈(hdu 1527和2177)
- 51nod 1072 威佐夫游戏(威佐夫博弈)
- 2017山东省赛A题(SDUT3893威佐夫博弈+尼姆博奕)