就一个一个的枚举,1-3块手头,先手必胜,4块手头,先手必负,

5个石头,拿一个,让对手变成4个,那么必胜。

8个石头,不管怎么拿,必负。

因此可归纳出4的倍数的石头时,都必输。

这种是最简单的博弈论问题,因为容易枚举,很容易找到规律。

这种存在一个递归枚举的做法,非常经典,但是会超时。

class Solution {
public:bool stoneGame(vector<int>& piles) {return helper(0,piles.size()-1,0,0,true,piles);}bool helper(int left, int right, int scoreA, int scoreB, bool turnA, vector<int>& piles){if(left==right){return scoreA>scoreB;}if(turnA){if(helper(left+1,right,scoreA+piles[left],scoreB,!turnA,piles)||helper(left,right-1,scoreA+piles[right],scoreB,!turnA,piles)) return true;}else{if(helper(left+1,right,scoreA,scoreB+piles[left],!turnA,piles)&&helper(left,right-1,scoreA,scoreB+piles[right],!turnA,piles)) return true;}return false;}
};

Leetcode 博弈论先手必胜解题思路(Leetcode 292/877)相关推荐

  1. 解题思路-LeetCode第713题:乘积小于K的子数组

    解题思路-LeetCode第713题:乘积小于K的子数组 题目描述: 给定一个正整数数组 nums. 找出该数组内乘积小于 k 的连续的子数组的个数. 示例 1: 输入: nums = [10,5,2 ...

  2. Leetcode 344. 反转字符串 解题思路及C++实现

    解题思路: 直接将第 i 个字符 与 第 n-1-i 个字符交换,就可以了. class Solution { public:void reverseString(vector<char> ...

  3. Leetcode 223. 矩形面积 解题思路及C++实现

    解题思路: 着重研究一下矩形四个顶点坐标的大小关系. if 条件语句中判断是否出现不重叠的情况. 当出现重叠时,需要找出重叠矩形的四个顶点坐标:在小的横坐标中找出更大者,就是重叠矩形中较大的横坐标值 ...

  4. Leetcode 206. 反转链表 解题思路及C++实现

    解题思路: 利用三个指针 left.right.tmp.left指向的是每一步反转之后的头结点,right指向的是当前需要反转的节点,tmp指向的是下一步需要反转的节点. /*** Definitio ...

  5. Leetcode 160. 相交链表 解题思路及C++实现

    解题思路: 先将两个链表构建成一个环,定义两个快慢指针,当它们相遇时,将fast指针从头结点往后遍历,每次走一步,当这两个指针再次相遇时,该节点就是相交节点. /*** Definition for ...

  6. Leetcode 141. 环形链表 解题思路及C++实现

    解题思路: 定义快慢两个指针,当指针所指节点是同一个时,说明出现了环. /*** Definition for singly-linked list.* struct ListNode {* int ...

  7. Leetcode 205. 同构字符串 解题思路及C++实现

    解题思路: 仔细阅读题意,应注意到一个 hash表是不够的,需要新建两个hash表,分别存储 s->t 和 t->s 的映射. class Solution { public:bool i ...

  8. Leetcode 204. 计数质数 解题思路及C++实现

    解题思路: 利用一个数组记录 n 个数是否为质数. 质数的倍数都是非质数,就这样遍历下去就可以了. class Solution { public:int countPrimes(int n) {if ...

  9. Leetcode 202. 快乐数 解题思路及C++实现

    解题思路: 用递归的方法,出现1,就返回true,这里用了 unordered_map 来记录是否会出现循环.(也可以用unordered_set) 通过计算余数和商,来得到每个位置数字的平方和.具体 ...

最新文章

  1. java usbkey数字证书_Java创建数字证书
  2. 前端学习(604):编程语言
  3. 按用户设置计算机权限,巧妙设置用户权限 管理学生机房计算机
  4. 【jQuery】jQuery对本地json的读取和遍历
  5. 【重难点】【RabbitMQ 01】消息队列的作用、主流的消息队列、RabbitMQ 基于什么传输消息、RabbitMQ 模型架构、死信队列和延迟队列
  6. php mui.picker,www MUI框架里边有很多例子教你如何使用 开发手机界面 WEB(ASP,PHP,...) 251万源代码下载- www.pudn.com...
  7. dbms中怎么跨数据源拷贝数据_Oracle中使用DBMS_XPLAN处理执行计划详解
  8. [17] 楼梯(Stairs)图形的生成算法
  9. 杨辉三角形(C语言)(使用一维数组的版本)
  10. struts2文件上传类型的过滤
  11. 从头到尾谈一下HTTPS
  12. 图形图像会议期刊文章查询
  13. JavaScript : 基本的处理事件
  14. 响应式web开发 许愿墙
  15. 08.音频系统:第004课_Android音频系统详解:第002节_以例子说明几个重要概念
  16. 柱面投影、拼接视差、球面投影
  17. 男生追女生的套路有哪些?男生追女生的套路!
  18. WPS Excel表格条件格式在哪如何使用以大于500的数字飘红加粗为例
  19. word文档乱码了怎么办
  20. 阿里天池大数据之移动推荐算法大赛总结及代码全公布

热门文章

  1. 自动化运维时代,我们该如何是好?
  2. wamp橙色变成绿色
  3. 百望云纳税申报管理解决方案,引领企业智慧税务建设
  4. TokenInsight BTC永续合约流动性实时数据 | TokenInsight
  5. python3多线程传参_python多线程 怎么传送多个参数
  6. 微信多开?一招教你想开几个开几个
  7. spss连接至远程计算机,SPSS操作:轻松实现1:1倾向性评分匹配(PSM)
  8. java-古堡谜题-第一阶段
  9. 深度学习部署--搭建后台服务器
  10. 问题 K: oop实习-11.运算符重载