LeetCode 486. 预测赢家(博弈DP)
文章目录
- 1. 题目
- 2. 解题
1. 题目
给定一个表示分数的非负整数数组。
玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,…… 。
每次一个玩家只能拿取一个分数,分数被拿取之后不再可取。直到没有剩余分数可取时游戏结束。
最终获得分数总和最多的玩家获胜。
给定一个表示分数的数组,预测玩家1是否会成为赢家。
你可以假设每个玩家的玩法都会使他的分数最大化。
示例 1:
输入:[1, 5, 2]
输出:False
解释:一开始,玩家1可以从1和2中进行选择。
如果他选择 2(或者 1 ),那么玩家 2 可以从 1(或者 2 )和 5 中进行选择。
如果玩家 2 选择了 5 ,那么玩家 1 则只剩下 1(或者 2 )可选。
所以,玩家 1 的最终分数为 1 + 2 = 3,而玩家 2 为 5 。
因此,玩家 1 永远不会成为赢家,返回 False 。示例 2:
输入:[1, 5, 233, 7]
输出:True
解释:玩家 1 一开始选择 1 。
然后玩家 2 必须从 5 和 7 中进行选择。
无论玩家 2 选择了哪个,玩家 1 都可以选择 233 。最终,玩家 1(234 分)比玩家 2(12 分)获得更多的分数,所以返回 True,表示玩家 1 可以成为赢家。提示:
1 <= 给定的数组长度 <= 20.
数组里所有分数都为非负数且不会大于 10000000 。
如果最终两个玩家的分数相等,那么玩家 1 仍为赢家。
来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/predict-the-winner
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
2. 解题
类似题目:
LeetCode 464. 我能赢吗(状态压缩+记忆化递归 / 博弈)
LeetCode 877. 石子游戏(DP)
LeetCode 1140. 石子游戏 II(DP)*
LeetCode 1406. 石子游戏 III(DP)
LeetCode 1563. 石子游戏 V(DP)
LeetCode 5447. 石子游戏 IV hard(博弈DP)
LeetCode 1025. 除数博弈(动态规划)
LeetCode 5611. 石子游戏 VI(贪心)
LeetCode 5627. 石子游戏 VII(博弈DP)
天池 在线编程 双向取数(博弈DP)
dp[i][j]
表示剩余石子区间为[i,j]
时,当前玩家与另一个玩家的最大分差
class Solution {public:bool PredictTheWinner(vector<int>& nums) {int n = nums.size(), i, j;vector<vector<int>> dp(n, vector<int>(n, INT_MIN));for(i = 0; i < n; ++i)dp[i][i] = nums[i];for(int len = 1; len < n; ++len){for(i = 0; i+len < n; ++i){dp[i][i+len] = max(nums[i]-dp[i+1][i+len], nums[i+len]-dp[i][i+len-1]);// 当前选手 拿左边,减去下一个选手的分差; 拿右边,减去下一个选手的分差}}return dp[0][n-1] >= 0;// 当前选手(先手)分差多或者等于,win}
};
4 ms 8 MB
状态空间只与上一行有关,可以压缩,代码略。
我的CSDN博客地址 https://michael.blog.csdn.net/
长按或扫码关注我的公众号(Michael阿明),一起加油、一起学习进步!
LeetCode 486. 预测赢家(博弈DP)相关推荐
- leetcode - 486. 预测赢家
给定一个表示分数的非负整数数组. 玩家1从数组任意一端拿取一个分数,随后玩家2继续从剩余数组任意一端拿取分数,然后玩家1拿,--.每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直到没有剩余分数 ...
- leetcode486. 预测赢家(dp)
给定一个表示分数的非负整数数组. 玩家 1 从数组任意一端拿取一个分数,随后玩家 2 继续从剩余数组任意一端拿取分数,然后玩家 1 拿,-- .每次一个玩家只能拿取一个分数,分数被拿取之后不再可取.直 ...
- 486. Predict the Winner | 486. 预测赢家(博弈论)
题目 https://leetcode.com/problems/predict-the-winner/ 题解 这道题和 leetcode 877. Stone Game | 877. 石子游戏(递归 ...
- LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题)
LeetCode - 486. Predict the Winner(排成一条线的纸牌博弈问题) 递归解法 动态规划解法 题目链接 题目 递归解法 定义递归函数f[i,j],表示的是如果arr[i.. ...
- LeetCode 1690. 石子游戏 VII(博弈DP)
文章目录 1. 题目 2. 解题 1. 题目 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排.每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获 ...
- 天池 在线编程 双向取数(博弈DP)
文章目录 1. 题目 2. 解题 1. 题目 https://tianchi.aliyun.com/oj/245679029019779851/254275128279634585 有一个长度为n的数 ...
- *【CodeForces - 859C 】Pie Rules (博弈dp,时光倒流)
题干: You may have heard of the pie rule before. It states that if two people wish to fairly share a s ...
- LeetCode 85. 最大矩形(DP/单调递增栈,难)
文章目录 1. 题目 2. 解题 2.1 DP 2.2 单调递增栈 1. 题目 给定一个仅包含 0 和 1 的二维二进制矩阵,找出只包含 1 的最大矩形,并返回其面积. 示例: 输入: [[" ...
- LeetCode 221. 最大正方形(DP)
文章目录 1. 题目信息 2. 解题 1. 题目信息 在一个由 0 和 1 组成的二维矩阵内,找到只包含 1 的最大正方形,并返回其面积. 示例: 来源:力扣(LeetCode) 链接:https:/ ...
最新文章
- 宏基因组教程Metagenomics Tutorial (HUMAnN2)
- Oracle 基础篇 --- 表空间的操作
- Java 项目权威排名:Spring生态抢镜,Gradle战胜Maven排第2,点击查看更多...
- python浮点数运算问题_python基础教程之. 浮点数运算:问题和局限
- mysql php加速_mysql存储过程加速 - mysql数据库栏目 - 自学php
- 安全狗服云手机端上架各大手机应有市场
- Perl语言入门——Perl变量简介
- 缓存数据一致性-解决方案
- NXP JN5169使用硬件I2C从机收发数据
- matlab线性方程组画图,线性方程组求解在Excel和Matlab中的实现
- 短文阅读1:Entire Space Multi-Task Model: An Effective Approach for Estimating Post-Click Conversion Rate
- 锆石 Hello FPGA 笔记——part1 数字电路篇
- used in key specification without a key length
- 机器学习算法基础20210504-0529
- MATLAB中的一些小技巧(2) - [MATLAB]
- wps excel查找不定位_【WPS神技能】如何在WPSExcel表格中批量查找两列数据的不同?...
- HashTable 使用
- 钉钉通知-调用钉钉发送企业内部消息开发
- websocket连接不稳定_帮你解决WiFi卡顿:拒绝连接不稳定、网速慢
- 2021-11-2记一次win7下python两种版本的完全安装
热门文章
- 【解决】如何打开.ipynb文件
- postgis 导出 栅格_postgis常见的空间数据的导入导出
- 用计算机计算出密码,自带计算器的密码
- 第一季4:Hi3518E_SDK_Vx.x.x.x的SDK目录结构
- 字符串类型、结构体、共用体、枚举、container宏、内存来源
- mysql 优化之 is null ,is not null 索引使用测试
- VS 使用 :新建项目
- 【学习总结】Markdown 使用的正确姿势
- 进阶攻略|前端最全的框架总结
- jquery hover事件中 fadeIn和fadeOut 效果不能及时停止