博弈论专题1 HDOJ 1846 Brave Game
来源:互联网 发布:kindle保护套推荐知乎 编辑:程序博客网 时间:2024/06/05 02:49
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=1846
分析:做博弈论类的题目,我觉得最关键的是分析极限条件。特别是这类游戏题目,我们假设最后时的情况,当还剩下m+1个石子时,轮到A拿石子,由于A至少要拿1个石子,所以不管A拿走多少个,剩下的可以由B全部拿走。此种情况下,A必败。此时我们扩展这种极限情况,当剩下k(m+1)个石子时,K为整数,这时实际上可以将问题分解为K个极限情况,由于双方都是绝对聪明的,假设此时轮到A拿,A不论拿任意x颗石子(大于1小于等于M),B都可以拿走m+1-x颗石子,使整堆石子剩下(k-1)(m+1),如此循环,到最后就是我们最开始列出的极限情况,此时A必败无疑。因此,我们解题的关键,或者说是制胜的关键就是让对方剩下k(m+1)个石子,由于绝对聪明,这种情况下对方将毫无疑问的输掉。
对于此题而言,当n <= m 时,first胜。当 n > first 时,如果 n = k(m+1) 即 n%(m+1) = 0 则second 胜,否则first胜。
程序如下:
Memory: 188 KB Time: 15 MS Language: C Result: Accepted This source is shared by hust_lcl/*此题实际上是BASH GAME,关键是找寻取胜策略,搜寻极端情况n = m + 1此时轮到A做出选择,因为可以拿的石子数为1-m因此,无论A选择几个,剩下的m + 1 - k 个可以全部被B选走取胜将此情况推广,取胜关键就是给对方留下m+1的整数倍个石子轮到A时,如果n = (m + 1)*k + a个,则A选走a个剩下的B选走k个 k<=m,然后A再选走m + 1 - k个 这样始终剩下m+1的整数倍个给B,最终会到达n = m + 1个的情况,A取胜*/#include <stdio.h>#include <stdlib.h>int main(){ int c , n , m; scanf("%d",&c); while(c--) { scanf("%d%d",&n,&m); if(n%(m+1)==0) printf("second\n"); else printf("first\n"); } return 0;}
- 博弈论专题1 HDOJ 1846 Brave Game
- hdoj 1846 Brave Game博弈论问题
- hdu 1846Brave Game 博弈论
- HDU 1846 Brave game 博弈论
- HDU 1846 Brave Game 博弈论
- HDOJ 1846 Brave Game
- HDOJ 1846 Brave Game
- hdoj-1846-Brave Game
- HDU 1846 Brave Game(博弈论)
- hdu-1846-Brave Game-博弈论-java
- hdu1856 Brave Game(博弈论)
- HDOJ 1846 Brave Game 巴什博奕
- HDOJ 1846 Brave Game(巴什博奕)
- HDU1846(博弈论,Brave Game)
- hdoj 1846 Brave Game(巴什博弈)
- hdoj 1846 Brave Game【巴什博弈】
- HDOJ 1846 Brave Game(巴士博弈)
- HDU.1846 Brave Game (博弈论 巴什博弈)
- smtp相关
- 敏捷开发一千零一问系列之十五:同时实施CMMI和敏捷哪个为主?
- ios菜鸟之路:iphone连接webservice服务操作
- Flash Mp3播放器中写的Lrc歌词解析函数
- IT学生在校学习六层楼
- 博弈论专题1 HDOJ 1846 Brave Game
- linux下修改tomcat的默认目录
- 敏捷开发一千零一问系列之十六:如何让开发人员学习产品?
- 流处理器数量
- protected与default的区别
- 敏捷开发一千零一问系列之十七:长期受制于强势客户怎么办?(上)
- 方块消除 (黑书)
- 一个类似ifconfig功能的程序代码--C语言
- Apophysis作品——鸟巢渲染日志