![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
ACM[博弈]
sevenster
= = 水男
展开
-
HDOJ 1536 SG函数的基本应用
从题意来看,是基本的SG函数应用,把刚学的set用进去优化,发现不行... TLE... 再看看SG的原理,网上大部分都是采用递归,而那些题解报告都是一把抄,嗤之以鼻.. 下面是直接TLE的代码: /********************* S-Nim Sevenster 2012.08.26 12:55 *********************/ #include #includ原创 2012-08-26 13:36:46 · 766 阅读 · 0 评论 -
HDOJ 1848组合博弈 SG函数的基本应用
文章不错,大家可以看看。 搞了半天原来SG函数这么简单,类比为Nim真是碉炸啦! 不太会写,将原理拿过来直接敲了。 #include #include using 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 · 1230 阅读 · 0 评论 -
HDOJ 几道博弈水题
HDOJ 1847 SG函数入门(不用也行)基本博弈的理解。 #include using 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 · 796 阅读 · 0 评论 -
HDOJ 2509 Nim博弈
这题只是一只纸老虎。但是我确实被它吓到了。 你瞧瞧题中说的,一个堆可以分裂成两个堆,这么复杂的问题实在不会做啊! 准备搜题解,看看别人都是寥寥数句结题。于是我也赌气不看题解了,自己推。 分析: 照样设置T0,S0点。根据题意可知T0为必胜点,S0为必败点。 S1点:有且仅有一堆的数量>=2,这里为啥不用考虑分割堆呢? S1能转变为S0点,主动权当然在面临这个选择的人身上,显然是必胜点。原创 2012-08-23 20:34:17 · 813 阅读 · 0 评论 -
HDOJ 1907
大概看了一种博弈问题的变化题,左边这个链接讲解的还是不错的。 Nim博弈大家都知道,就是有N堆石子,两人轮流取,每次在一堆中取任意个,取到最后一个的胜利。 现在的变化是,取到最后一个的算失败。 这怎么做? 首先我们定义: 对于N堆石子,每堆的个数为Ai(1 设C=A1^A2^...^An; 若C=0,则状态设为T,称为利他态。反之,设状态为S,称为利己态。 孤单堆,该堆的石子数量为原创 2012-08-23 17:52:04 · 785 阅读 · 0 评论 -
HDOJ 2188&&2149 水博弈
一起做过类似的,如果是以前的我的话,肯定会从0状态开始,打个表搞起。 现在想到了另外一种方法,把箱子看成装满钱的,每人从里面拿钱,最多拿m元,拿到最后一张的获胜。 #include using namespace std; int main() { int T; scanf( "%d",&T ); while( T-- ) { int n,m; s原创 2012-08-23 21:10:52 · 670 阅读 · 0 评论 -
HDOJ 1524 SG函数标准模板题
SG的模板题,不多说。 这里采用记忆化深搜优化。Time=15ms还不错。 #include #include using 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 · 644 阅读 · 0 评论 -
HDOJ 1730 又见阶梯博弈
再做有种亲切感,比SG简单多了.... 泪奔.... 将同行两棋子之间的空格数视为某堆的石子数。 进行一次Nim就OK了.... #include #include using 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 · 654 阅读 · 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 · 739 阅读 · 0 评论