
博弈论
111111用户昵称不存在00000
这个作者很懒,什么都没留下…
展开
-
HDU3032->SG函数
HDU3032->SG函数题意: 两个人玩游戏,有n堆石子,每堆个数不等,可以进行的操作是从任一堆中取任意颗石子,或者把这堆石子分成两堆。 给出一个初始的局面,判断先手胜还是后手胜。题解: sg(n)代表从当前状态到游戏结束最多需要多少步当有n堆石子时,游戏相当于一个组合博弈,当前的sg值就是每堆石子的sg值异或的结果。 对于任意的一个 Anti-SG 游戏,如果我们规定当局面中所原创 2016-08-28 18:27:57 · 625 阅读 · 0 评论 -
HDU1536->SG函数
HDU1536->SG函数题意: 给出n堆石子,每次只能按照规定的取石子个数取,输出先手的胜负情况。题解: 递归求出sg函数就能解决问题。代码:#include <stdio.h>#include <iostream>#include <string.h>#include <algorithm>using namespace std ;int s[110] , sg[10010原创 2016-08-29 14:52:11 · 451 阅读 · 0 评论 -
HDU1730->Nim博弈
HDU1730->Nim博弈题意: 游戏在一个n行m列(1 ≤ n ≤ 1000且2 ≤ m ≤ 100)的棋盘上进行,每行有一个黑子(黑方)和一个白子(白方)。执黑的一方先行,每次玩家可以移动己方的任何一枚棋子到同一行的任何一个空格上,当然这过程中不许越过该行的敌方棋子。双方轮流移动,直到某一方无法行动为止,移动最后一步的玩家获胜。 判断先手的胜负情况。题解: 等效于nim博弈。原创 2016-08-29 15:34:03 · 568 阅读 · 0 评论 -
HDU1525->博弈论
HDU1525->博弈论题意: 两个人玩游戏,给出两个数字,每个人只能用大的数字减去小的数字的任意正整数倍,先把一个数减到0的人获胜,问谁最后获胜。题解: 记a > b, 如果输入中a和b中有一个是0,则先手直接获胜。 否则: 如果a%b == 0 , 则此时正在操作的人可以直接获胜; 如果a/b>=2,则此时正在玩游戏的人可以通过自己的操作决定必胜和必败。原创 2016-08-20 17:07:01 · 581 阅读 · 0 评论 -
威佐夫博弈->HDU1527
威佐夫博弈->HDU1527威佐夫博弈(Wythoff Game): 有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况下是颇为复杂的。我们用(ak,bk)(ak ≤ bk ,k=0,1,2,…,n)表示两堆物品的数量并称其为局势,如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(原创 2016-08-21 12:59:49 · 373 阅读 · 0 评论 -
Nim博弈->HDU1907
Nim博弈->HDU1907Nim博弈介绍:1.有三堆各若干个物品,两个人轮流从某一堆取任意多的物品,规定每次至少取一个,多者不限,最后取光者得胜。这种情况最有意思,它与二进制有密切关系,我们用(a,b,c)表示某种局势,首先(0,0,0)显然是奇异局势,无论谁面对奇异局势,都必然失败。第二种奇异局势是(0,n,n),只要与对手拿走一样多的物品,最后都将导致(0,0,0)。仔细分析一下,(1,2,3原创 2016-08-22 21:36:18 · 541 阅读 · 0 评论