
博弈
文章平均质量分 75
lp_opai
我没有时间写一封简短的信,所以我写了一封长的。
展开
-
poj 1704 (阶梯博弈)
首先是对阶梯博弈的阐述...博弈在一列阶梯上进行...每个阶梯上放着自然数个点..两个人进行阶梯博弈...每一步则是将一个集体上的若干个点( >=1 )移到前面去..最后没有点可以移动的人输..如这就是一个阶梯博弈的初始状态 2 1 3 2 4 ... 只能把后面的点往前面放...如何来分析这个问题呢...其实阶梯博弈经过转换可以变为Nim..把所有奇数阶梯看成N堆石子..原创 2014-09-18 20:40:06 · 596 阅读 · 0 评论 -
hdu 1527 取石子游戏 (裸威佐夫博奕)
/*有两堆石子,数量任意,可以不同。游戏开始由两个人轮流取石子。游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子二是可以在两堆中同时取走相同数量的石子。最后把石子全部取完者为胜者*/# include # include # include # include # include using namespace std;int main(){原创 2014-09-22 19:12:17 · 804 阅读 · 0 评论 -
hdu 2177 取(2堆)石子游戏 (威佐夫博奕)
//,在威佐夫博奕的基础上新增加了一条要求:就是如果在赢得条件下,输出第一步怎么走。# include # include # include # include # include using namespace std;int main(){ int a,b,i,k; while(~scanf("%d%d",&a,&b),a+b) { k原创 2014-09-22 19:51:32 · 773 阅读 · 0 评论 -
hdu 5011 (nim博弈模版)
//nim博弈//有n堆石头,两人轮流每次从一堆中拿至少1,之多全部的石头,没有石头可拿为lose//判断先手是win还是lose# include # include # include using namespace std;int main(){ int n,i; __int64 a,sum; while(~scanf("%d",&n)) {原创 2014-09-15 19:50:31 · 964 阅读 · 0 评论 -
hdu 1730 Northcott Game (nim博弈变形)
# include # include # include # include # include using namespace std;int main(){ int n,m,i,a,b,cot; while(~scanf("%d%d",&n,&m)) { cot=0; for(i=0; i<n; i++)原创 2014-09-15 20:10:47 · 1386 阅读 · 0 评论 -
poj 3975&&hdu 1850 (nim)
//先手能赢//从n堆石头中的一堆里去掉几颗,有多少堆石头可取# include # include # include using namespace std;int main(){ int n,sum,i,j,a[1010],cot,vis[1010]; while(~scanf("%d",&n),n) { sum=0;原创 2014-09-17 21:10:46 · 1021 阅读 · 0 评论 -
hdu 1536 S-Nim (sg函数模版)
/*题意就是给出一个数组s。为每次可以取石子的数目。然后给你n堆石子每堆si。求解先手能不能赢!标准的sg函数用法题目。计算从1-n范围内的SG值。Array(存储可以走的步数,Array[0]表示可以有多少种走法)Array[]需要从小到大排序1.可选步数为1-m的连续整数,直接取模即可,SG(x) = x % (m+1);2.可选步数为任意步,SG(x) = x;3.可选步原创 2015-02-04 10:41:27 · 622 阅读 · 0 评论 -
POJ 2311 Cutting Game (sg函数)
给出一个N*M的纸片,每一次可以把一部分剪成两部分,谁剪出1*1的就赢了。http://poj.org/problem?id=2311对于任何一个人,都不会先剪出1*n或者n*1,应该这样就必败了。那我们考虑一个状态的后继中,最小的边也是2,这样就可以避免之前的问题,也不需要考虑类似ANTI-SG。一旦出现2*2,2*3,3*2,这些都成了终止状态,不论怎么剪都原创 2015-02-05 16:06:14 · 860 阅读 · 0 评论 -
hdu 1524 A Chess Game (SG)
题意:在一个有向无环图上有n个顶点,每一个顶点都只有一个棋子,有两个人,每次根据这个图只能将任意一颗棋子移动一步,如果到某一步玩家不能移动时,那么这个人就输.分析:本题是最典型的有向无环图的博弈,利用dfs把所有顶点的SG值都计算出来,然后对每个棋子的SG值进行异或运算,如果为0就是先手必败,否则就是先手必胜.如果某个人移动到出度为0的顶点,原创 2015-02-05 20:09:22 · 561 阅读 · 0 评论