LeetCode Nim Game 递推
2015-11-08 10:59
169 查看
思路:
类似编程之美上的石头问题。
一堆石头,A和B玩,每个人每次可取1~3个,谁取到最后一个谁赢,A先取。问n在等于多少的情况下,A有必胜的策略?
好了,可以看出规律了,n如果是4的倍数,B有必胜的策略。
所以,A的必胜策略是:
(1)在n<8的情况下:
A第一次取只需使得留给B的石头数是4即可。
(2)在n>9的情况下:
A第一次随便取,等B取完第二次后,A第三次取的结果只需使得剩下的石头数是4的倍数个石头即可。
java code:
类似编程之美上的石头问题。
一堆石头,A和B玩,每个人每次可取1~3个,谁取到最后一个谁赢,A先取。问n在等于多少的情况下,A有必胜的策略?
1 <= n <= 3 : A每次全取,肯定赢; n == 4 : A先怎么取, B都能赢; n == 5 : A取1个,给B留4个,A能赢; n == 6 : A取2个,给B留4个,A能赢; n == 7 : A取3个,给B留4个,A能赢; n == 8 : 无论A怎么取,B都能给A留4个,B能赢; n == 9 : 能回到 n == 5 的问题上; n == 10 : 能回到 n == 6 的问题上;
好了,可以看出规律了,n如果是4的倍数,B有必胜的策略。
所以,A的必胜策略是:
(1)在n<8的情况下:
A第一次取只需使得留给B的石头数是4即可。
(2)在n>9的情况下:
A第一次随便取,等B取完第二次后,A第三次取的结果只需使得剩下的石头数是4的倍数个石头即可。
java code:
public class Solution { public boolean canWinNim(int n) { return !(n % 4 == 0); } }
相关文章推荐
- 在TabControl中的TabPage选项卡中添加Form窗体
- 数据库
- 典型用户
- Mini2440存储控制器
- 支付宝iOS_SDK下载真不好找
- SQL基础学习5
- DP--矩阵连乘
- poj2549
- Openstack Murano(kilo)二次开发之添加Volume
- BFC, IFC
- ARP协议工作过程
- mysql show命令集合
- 信息安全系统设计基础第八周学习总结
- less和scss
- Java动态代理机制
- Linux 学习(3)-- kernel版本号的修改
- Python学习笔记(3)range的用法
- ApplicationContext的三种实现方式以及在web.xml配置的两种方式
- 哪种性格的人更长寿
- [转]python os模块 常用命令