
ACM[博弈]
sevenster
= = 水男
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDOJ 1536 SG函数的基本应用
从题意来看,是基本的SG函数应用,把刚学的set用进去优化,发现不行...TLE...再看看SG的原理,网上大部分都是采用递归,而那些题解报告都是一把抄,嗤之以鼻..下面是直接TLE的代码:/*********************S-NimSevenster2012.08.26 12:55*********************/#include#includ原创 2012-08-26 13:36:46 · 824 阅读 · 0 评论 -
HDOJ 1848组合博弈 SG函数的基本应用
文章不错,大家可以看看。搞了半天原来SG函数这么简单,类比为Nim真是碉炸啦!不太会写,将原理拿过来直接敲了。#include#includeusing namespace std;bool cmp( int a,int b ){ return a<b;}int mex( int rec[],int cnt ){ sort( rec,rec+cnt,cmp )原创 2012-08-24 11:06:52 · 1291 阅读 · 0 评论 -
HDOJ 几道博弈水题
HDOJ 1847 SG函数入门(不用也行)基本博弈的理解。#includeusing namespace std;int main(){ int n,list[1111]; memset( list,0,sizeof(list) ); for( int i=1;i<=1000;i++ ) for( int k=1;i-k>=0;k*=2 ) { if( l原创 2012-08-24 11:04:25 · 848 阅读 · 0 评论 -
HDOJ 2509 Nim博弈
这题只是一只纸老虎。但是我确实被它吓到了。你瞧瞧题中说的,一个堆可以分裂成两个堆,这么复杂的问题实在不会做啊!准备搜题解,看看别人都是寥寥数句结题。于是我也赌气不看题解了,自己推。分析:照样设置T0,S0点。根据题意可知T0为必胜点,S0为必败点。S1点:有且仅有一堆的数量>=2,这里为啥不用考虑分割堆呢?S1能转变为S0点,主动权当然在面临这个选择的人身上,显然是必胜点。原创 2012-08-23 20:34:17 · 880 阅读 · 0 评论 -
HDOJ 1907
大概看了一种博弈问题的变化题,左边这个链接讲解的还是不错的。Nim博弈大家都知道,就是有N堆石子,两人轮流取,每次在一堆中取任意个,取到最后一个的胜利。现在的变化是,取到最后一个的算失败。这怎么做?首先我们定义:对于N堆石子,每堆的个数为Ai(1设C=A1^A2^...^An;若C=0,则状态设为T,称为利他态。反之,设状态为S,称为利己态。孤单堆,该堆的石子数量为原创 2012-08-23 17:52:04 · 839 阅读 · 0 评论 -
HDOJ 2188&&2149 水博弈
一起做过类似的,如果是以前的我的话,肯定会从0状态开始,打个表搞起。现在想到了另外一种方法,把箱子看成装满钱的,每人从里面拿钱,最多拿m元,拿到最后一张的获胜。#includeusing namespace std;int main(){ int T; scanf( "%d",&T ); while( T-- ) { int n,m; s原创 2012-08-23 21:10:52 · 720 阅读 · 0 评论 -
HDOJ 1524 SG函数标准模板题
SG的模板题,不多说。这里采用记忆化深搜优化。Time=15ms还不错。#include#includeusing namespace std;struct EDGE{ int v,next;}E[11111111];int ptr[1111],Enum;int sg[1111];void addEdge( int u,int v ){ E[Enum]原创 2012-08-30 22:02:02 · 711 阅读 · 0 评论 -
HDOJ 1730 又见阶梯博弈
再做有种亲切感,比SG简单多了.... 泪奔....将同行两棋子之间的空格数视为某堆的石子数。进行一次Nim就OK了....#include#includeusing namespace std;int main(){ int N,M; while( scanf("%d %d",&N,&M)!=EOF ) { int xo=0; int a原创 2012-08-30 16:21:56 · 705 阅读 · 0 评论 -
HDOJ 1517 博弈的理解
题目大意:Stan与Ollie两人博弈,Stan先手。两人对当前数(初始为1)进行乘操作,乘数为[2,9];给定N,当某人第一次使得操作数大于等于N时,为胜利者。由博弈原理:设x为取到的值。则x>=N时为必败态。任何能转化为必败态的都是必胜态,所以[ceil(N/9),N-1]为必胜点。只能转化为必胜态的都是必败态,所以[(ceil(N/9)/2),ceil(N/9)-原创 2012-08-26 00:22:32 · 808 阅读 · 0 评论