1. 题目

Alice 和 Bob 用几堆石子在做游戏。几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出。

Alice 和 Bob 轮流取石子,Alice 总是先开始。在每个玩家的回合中,该玩家可以拿走剩下石子中的的前 1、2 或 3 堆石子 。比赛一直持续到所有石头都被拿走。

每个玩家的最终得分为他所拿到的每堆石子的对应得分之和。每个玩家的初始分数都是 0 。比赛的目标是决出最高分,得分最高的选手将会赢得比赛,比赛也可能会出现平局。

假设 Alice 和 Bob 都采取 最优策略 。如果 Alice 赢了就返回 “Alice” ,Bob 赢了就返回 “Bob”,平局(分数相同)返回 “Tie” 。

示例 1:
输入:values = [1,2,3,7]
输出:"Bob"
解释:Alice 总是会输,她的最佳选择是拿走前三堆,得分变成 6 。但是 Bob 的得分为 7,Bob 获胜。示例 2:
输入:values = [1,2,3,-9]
输出:"Alice"
解释:Alice 要想获胜就必须在第一个回合拿走前三堆石子,给 Bob 留下负分。
如果 Alice 只拿走第一堆,那么她的得分为 1,接下来 Bob 拿走第二、三堆,得分为 5 。
之后 Alice 只能拿到分数 -9 的石子堆,输掉比赛。
如果 Alice 拿走前两堆,那么她的得分为 3,接下来 Bob 拿走第三堆,得分为 3 。
之后 Alice 只能拿到分数 -9 的石子堆,同样会输掉比赛。
注意,他们都应该采取 最优策略 ,所以在这里 Alice 将选择能够使她获胜的方案。示例 3:
输入:values = [1,2,3,6]
输出:"Tie"
解释:Alice 无法赢得比赛。如果她决定选择前三堆,她可以以平局结束比赛,否则她就会输。示例 4:
输入:values = [1,2,3,-1,-2,-3,7]
输出:"Alice"示例 5:
输入:values = [-1,-2,-3]
输出:"Tie"提示:
1 <= values.length <= 50000
-1000 <= values[i] <= 1000

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/stone-game-iii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 877. 石子游戏(DP)

  • 参考大佬题解
  • 不管怎么取,第0个是Alice的,反向往前推
  • dp[i] 表示取到 i 号石头时的最大得分
  • sum 表示【i,…end】的和
  • dp[i] 是取1个石头过来的,前面别人取的最大值是dp[i+1],我在位置 i 取的值就是 sum - dp[i+1]
  • dp[i] 是取2个石头过来的,前面别人取的最大值是dp[i+2],我在位置 i 取的值就是 sum - dp[i+2]
  • dp[i] 是取3个石头过来的,前面别人取的最大值是dp[i+3],我在位置 i 取的值就是 sum - dp[i+3]
  • 取上面3种情况的max
class Solution {public:string stoneGameIII(vector<int>& stoneValue) {int i, n = stoneValue.size(), sum = 0;vector<int> dp(n+3,0);for(i = n-1; i >= 0; --i){sum += stoneValue[i];dp[i] = max(max(sum-dp[i+3], sum-dp[i+2]),sum-dp[i+1]);}if(dp[0] > sum-dp[0])return "Alice";else if(dp[0] < sum-dp[0])return "Bob";return "Tie";}
};

624 ms 132.3 MB

LeetCode 1406. 石子游戏 III(DP)相关推荐

  1. leetcode 877. 石子游戏(dp)

    题目 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚历克斯 ...

  2. 【Leetcode 877. 石子游戏】DP求解

    题面: 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚历克 ...

  3. LeetCode 1690. 石子游戏 VII(博弈DP)

    文章目录 1. 题目 2. 解题 1. 题目 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排.每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获 ...

  4. LeetCode 1686. 石子游戏 VI(贪心)

    文章目录 1. 题目 2. 解题 283 / 1660,前17% 681 / 6572,前10.4% 1. 题目 Alice 和 Bob 轮流玩一个游戏,Alice 先手. 一堆石子里总共有 n 个石 ...

  5. LeetCode 1690.石子游戏VII

    LeetCode 1690.石子游戏VII 问题描述: 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排.每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的 ...

  6. LeetCode 1306. 跳跃游戏 III

    LeetCode 1306. 跳跃游戏 III 题目说明 方法一:带辅助数组的dfs 方法二:不带辅助数组的dfs 题目说明 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start ...

  7. LeetCode 1140. 石子游戏 II(DP)*

    文章目录 1. 题目 2. 解题 1. 题目 亚历克斯和李继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 亚历克斯和李轮流进行,亚 ...

  8. LeetCode 1306. 跳跃游戏 III(广度优先搜索BFS)

    1. 题目 这里有一个非负整数数组 arr,你最开始位于该数组的起始下标 start 处. 当你位于下标 i 处时,你可以跳到 i + arr[i] 或者 i - arr[i]. 请你判断自己是否能够 ...

  9. LeetCode 877. 石子游戏

    1.题目 877. 石子游戏 2.题解 首先,一开始我觉得这道题目并不严谨.因为我大略感觉到先手选择的人就能赢得这个游戏,因为你总是可以在当前的选择中选择对自己有利的拿取方式,而后手只能在剩下的机会中 ...

最新文章

  1. 如何凭本事搞砸公司的重大项目?
  2. 用专业的说一句情话 计算机,用电脑专业说一句情话
  3. 【leetcode】Balanced Binary Tree(middle)
  4. ML之RF:利用Pipeline(客户年龄/职业/婚姻/教育/违约/余额/住房等)预测客户是否购买该银行的产品二分类(预测、推理)
  5. boost::polygon模块实现多边形点相关的测试程序
  6. redhat mysql tar_mysql5.7版本tar包手动安装---redhat7.0
  7. 异想维度 java_Java实现多字段(维度)复杂排序
  8. R语言do.call函数简单说明
  9. 传感器 - 距离传感器
  10. java喝醉怎么写,JAVA 代码代替 web.xml
  11. C 语言编码规范(MISRA-C-:2004)
  12. STC15F2K60S2单片机利用24C02记录单片机上电次数
  13. x264 settings
  14. 货拉拉 Android 动态资源管理系统原理与实践(下)
  15. Android Camera(13)HEIF Imaging
  16. 【leetcode】搜索二维矩阵 II
  17. 20212323 CSDN Python技能树和Markdown编辑器测评
  18. 美国计算机科学排名2010,2010年美国大学计算机科学专业研究生排名
  19. Git、GitHub、Gitee、GitLab
  20. Android高斯模糊(毛玻璃效果)蒙层库

热门文章

  1. MapReduce原理全剖析
  2. HDFS的简介及基本操作(常用的命令参数介绍)
  3. vue样式中背景图片路径_vue打包css文件中背景图片的路径问题
  4. PHP Cookie和Session
  5. php表示私有变量的是,PHP 访问私有和受保护的成员变量
  6. window 快捷键使用 + idear 编辑器使用
  7. Go语言之高级篇beego框架之参数配置与路由配置
  8. 解决/WEB-INF目录下的jsp页面引入webRoot下的Js、css和图片的问题
  9. Android - Glide4.4.0使用
  10. WCF入门(五)---创建WCF服务