博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷1288 取数游戏II 博弈论
阅读量:5833 次
发布时间:2019-06-18

本文共 1109 字,大约阅读时间需要 3 分钟。

洛谷1288 取数游戏II 博弈论

最优策略 一定是你一步把值走完,然后我再走完,这样不给别人留后路
然后这样走 只要自己从左走 或者从右走其中有一个有奇数步可走,则说明是必胜局
如果都是只能走偶数步的,就是必败局 、

另一个题解

首先,对于一条链a1,a2,a3,a4......0 如果是偶数条边,那么现手一定赢,因为他每一次都只

用把后面一条取完,例如

5 4 3 6 5 0

先手取完5,后手没法回到前一个位置,而无论接下来后手去多少,先手继续取完3,再然后取

完5,后手没办法再去,先手赢。就这样,如果从起点到第一个出现0的地方一共有偶数条边,先
手可以一步一步将后手被迫向前逼近,直到无法移动(由于是环,还应该考虑向后逼近)。

同样的,如果这有奇数个,那么先手第一步无论怎么取,都将自己置于一个必败状态(此时对于

后手来说边数变成偶数),就一定没有必胜状态

 

1 #include 
2 #include
3 #include
4 #include
5 #include
6 #include
7 #include
8 #include
9 using namespace std ; 10 11 const int maxn = 21 ; 12 int n,x ; 13 int a[maxn] ; 14 15 int main() 16 {17 scanf("%d",&n) ; 18 for(int i=1;i<=n;i++) scanf("%d",&a[ i ]) ; 19 x = 0 ; 20 for(int i=1;i<=n;i++) 21 if(a[ i ]) x++ ;22 else break ; 23 if(x&1) 24 {25 printf("YES\n") ; 26 return 0 ;27 } 28 x = 0 ; 29 for(int i=n;i>=1;i--) 30 if(a[ i ]) x++ ;31 else break ; 32 if(x&1) 33 {34 printf("YES\n") ; 35 return 0 ; 36 }37 printf("NO\n") ; 38 return 0 ; 39 }

 

转载于:https://www.cnblogs.com/third2333/p/7063727.html

你可能感兴趣的文章
rabbitmq的发布确认和事务
查看>>
Git从码云或者Github 克隆代码到本地
查看>>
Android实例-使用电话拨号器在移动设备上(官方)(XE8+小米2)
查看>>
创建文件/目录
查看>>
结对编程总结
查看>>
我的程序员之路(九)------参加郑州微软MVP宣讲会后的一些思考
查看>>
Android学习笔记 --- 数据存储与访问 (File,sdcard,sharedpreferences,sqlite)
查看>>
UWP应用程序使用Prism框架构建MVVM
查看>>
mmap复制文件
查看>>
一个简单的根据行数对大文件进行分片的python程序
查看>>
12.16 repeater
查看>>
SoapUI 使用变量
查看>>
POJ3629 2436(CUHK summer training on 28 JUN 2012)(队列、二进制)
查看>>
大三学长带我学习JAVA.作业8。 判断101-200之间有多少个素数,并输出所有素数。...
查看>>
day_03、集合、文件操作
查看>>
通过group by和having去除重复
查看>>
wojilu日志系统-可以单独使用
查看>>
POJ 1703 Find them, Catch them 并查集,还是有点不理解
查看>>
linux指令之文件查看 ls
查看>>
iOS 11 下 UICollectionView 的HeaderView 遮挡滚动条
查看>>