题目链接:http://poj.org/problem?id=2484

这道题目大意是这样的,有n个硬币围成一圈,两个人轮流开始取硬币(假设他们编号从1到n),可以选择取一枚或者取相邻的两枚(相邻是指他们的编号相邻)。在双方都采取最优策略取硬币的情况下,问谁最后会赢。

这道题目我一开始没有什么好的办法,n从1试到7,大致能发现n>=3的时候是Bob赢,否则是Alice赢。

可是为什么这样写正确呢?有没有严格一些的证明呢?

我查阅了许多资料,有了下边的理解,可能不是很准确,望纠正。

n<=3的时候显然易得。

当n>3时,我们分成两种情况讨论。

当n为偶数。我们可以把硬币环断开平均分成两列。

先手先取,先手无论取一个还是两个硬币(此时无所谓最优了,或者说都是最优),对方的最优策略总是跟着先手去相同数量的硬币,这样保证最后一个硬币是被后手拿掉。后手赢。

当n为奇数,如果先手取一个硬币,那么后手为了赢,他必须要想办法转化成n为偶数的情况,所以他取两个硬币;

      如果先手取两个硬币,那么后手为了赢,他必须要想办法转化成n为偶数的情况,所以他取一个硬币;

往后的过程就与上边分析的偶数情况一致了。

综上分析,得到我们的正确答案;

 if(n>=) printf("Bob");
2 else printf("Alice");

POJ 2484(对称博弈)的更多相关文章

  1. [poj2484]A Funny Game(对称博弈)

    题目:http://poj.org/problem?id=2484 题意:n个石子围成一个圈,两个人轮流取,每次可以取一个石子或者相邻的两个石子,问先手胜还是后手胜 分析: 典型的对称博弈 如果n&g ...

  2. [原博客] POJ 2484 A Funny Game

    题目链接题意:有n个硬币排成一圈,两个人轮流操作,每次可以取走一个或者相邻的连个硬币(只算最开始相邻的,取之后才相邻的不算),问先手必胜还是必败. 这个题可以证明若n>=3,则先手必败.对称博弈 ...

  3. hrbustoj 2033 A Funny Game(对称博弈)

    对称博弈,注释在代码里 #include<iostream> #include<cstdio> using namespace std; ///这个地方其实是博弈原理里面的对称 ...

  4. poj 2425 AChessGame(博弈)

    A Chess Game Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 3791   Accepted: 1549 Desc ...

  5. D. Circle Game 题解(对称博弈)

    题目链接 题目大意 t组数据(t<=100) 给你一个半径d和步数k,你最开始在原点(0,0)每次可以让x坐标增加k,或者y坐标增加k 两人轮流走,求谁最后不能走了,谁就输了,都是最优博弈 输的 ...

  6. POJ 2484 A Funny Game 博弈论 对称博弈

    http://poj.org/problem?id=2484 1和2时Alice必胜,3时Bob必胜,其他情况下Bob只需要在Alice取过之后取一次将剩下的硬币链平均分为两份,然后Alice怎么取B ...

  7. poj 2484 A Funny Game(博弈)

    A Funny Game Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4639   Accepted: 2855 Desc ...

  8. POJ 2484 A Funny Game【博弈】

    相比数据结构的题..感觉这种想啊想的题可爱多了~~~代码量还少.... 题目链接: http://poj.org/problem?id=2484 题意: 一圈n个硬币,两人轮流从中取一或两个硬币,(只 ...

  9. POJ 2484 A Funny Game(智商博弈)

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6397   Accepted: 3978 Description Alice ...

随机推荐

  1. go语言的指针

    什么是指针 一个指针变量指向了一个值的内存地址.(也就是我们声明了一个指针之后,可以像变量赋值一样,把一个值的内存地址放入到指针当中.) 类似于变量和常量,在使用指针前你需要声明指针.指针声明格式如下 ...

  2. 【C】对指针表达式的个人总结与思考

    本文内容参考<c 和 指针>. 声明:本博文只为那些能沉得住气,认真研究,探索真知的人参考,浮躁的人请离开,因为看不懂. 感觉以前学c的时候,学的指针真是白学了,今天看到这个内容,困惑后, ...

  3. React 组件间通信

    https://jsfiddle.net/69z2wepo/9719/ <script src="https://facebook.github.io/react/js/jsfiddl ...

  4. Java基础——JVM内存结构

    推荐阅读:https://www.cnblogs.com/wangjzh/p/5258254.html 一.内存结构图 先导知识: 一个 Java 源程序文件,会被编译为字节码文件(以 class 为 ...

  5. 验证码生成工具——Jcaptcha

    <dependency> <groupId>com.octo.captcha</groupId> <artifactId>jcaptcha</ar ...

  6. 20155207 《Java程序设计》实验报告二:Java面向对象程序设计

    实验要求 1.初步掌握单元测试和TDD 2.理解并掌握面向对象三要素:封装.继承.多态 3.初步掌握UML建模 4.熟悉S.O.L.I.D原则 5.了解设计模式 实验内容 一.单元测试 1.三种代码 ...

  7. 20155220 2016-2017-2 《java程序设计》第二周学习总结

    教材学习内容总结 3.1类型.变量与运算符 1)基本类型 byte 字节型 1 byte short 短整型 2 bytes int 整型 4 bytes long 长整型 8 bytes float ...

  8. 20155305乔磊2016-2017-2《Java程序设计》第一周学习总结

    学习考核方式后感 老师对于成绩的获得有很多细节的地方,获得高分很不容易,考核次数也很多,100分分为课堂考核,实验,团队项目,老师对我们的要求可以说非常的严格,我也为有一个要求严格的老师感到幸运荣幸. ...

  9. 20155322 《Java程序设计》课堂实践项目MyOD

    20155322 <Java程序设计>课堂实践项目MyOD 实践要求 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和 ...

  10. 20155331 《信息安全技术概论》实验二 Windows口令破解

    20155331 <信息安全技术概论>实验二 Windows口令破解 [实验目的] 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 [实验原理] 口令破 ...