LeetCode-877 石子游戏
动态规划 LeetCode-877 石子游戏
题目链接:LeetCode-877
题目大意:从一排石子堆最左面或者最右面取石子 每次一堆必须全部取走 最后石子总数多的获胜 问最后先手可不可以获胜
解题思路:最简单的方法是直接返回true 我们以1,2,3,4,这四堆石子为例 先手如果拿了1号位的石子 就能拿到3号位的石子 如果拿了4号位的石子 就能拿到2号位的石子 由此可以继续推6,8,10…(偶数堆)都是一样的情况 所以 只要先手就一定能赢 这是针对题中限定是偶数堆的情况 返回true就好了 但是这种情况并不能适用于奇数堆 所以我们进行一下扩展 如果是奇数堆该怎么做?
显然是一个动态规划问题,这里我们声明一个二维数组 dp[i][j]的含义是i号堆到j号堆先手能赢后手的石头数 所以当i等于j的时候 先手拿一堆就没了 所以这里储存的是第i号堆的石子数 接下来求最优解 只能拿最左面或者最右面 A先拿最左面的石子堆的话 他的净胜数就是最左面的石子数减去B在剩下的石子堆里的最优解 先拿右面也是同理 所以方程出来了:dp[i][j] = Math.max(piles[i]-dp[i+1][j],piles[j]-dp[i][j-1]) 最后看从第一堆(i=0)到最后一堆(j=length-1)的净胜值是否大于零就好了 顺便附上先手不能赢的效果图
代码块:
class Solution {public boolean stoneGame(int[] piles) {int len = piles.length;//dp数组代表从i号数字到j号数字先手能赢后手的石头数int[][] dp = new int[len][len];for(int i=0;i<len;i++){dp[i][i] = piles[i];}for(int i=len-1;i>=0;i--){for(int j=i+1;j<len;j++){dp[i][j] = Math.max(piles[i]-dp[i+1][j],piles[j]-dp[i][j-1]);}}//打印确认 此处可以省略for(int i=0;i<len;i++){System.out.println(Arrays.toString(dp[i]));}return dp[0][len-1]>0;}
}
LeetCode-877 石子游戏相关推荐
- LeetCode 877. 石子游戏
1.题目 877. 石子游戏 2.题解 首先,一开始我觉得这道题目并不严谨.因为我大略感觉到先手选择的人就能赢得这个游戏,因为你总是可以在当前的选择中选择对自己有利的拿取方式,而后手只能在剩下的机会中 ...
- leetcode —— 877. 石子游戏
亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚历克斯先开始 ...
- leetcode 877. 石子游戏(dp)
题目 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚历克斯 ...
- 【Leetcode 877. 石子游戏】DP求解
题面: 亚历克斯和李用几堆石子在做游戏.偶数堆石子排成一行,每堆都有正整数颗石子 piles[i] . 游戏以谁手中的石子最多来决出胜负.石子的总数是奇数,所以没有平局. 亚历克斯和李轮流进行,亚历克 ...
- LeetCode 1690. 石子游戏 VII(博弈DP)
文章目录 1. 题目 2. 解题 1. 题目 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排.每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获 ...
- LeetCode 1686. 石子游戏 VI(贪心)
文章目录 1. 题目 2. 解题 283 / 1660,前17% 681 / 6572,前10.4% 1. 题目 Alice 和 Bob 轮流玩一个游戏,Alice 先手. 一堆石子里总共有 n 个石 ...
- LeetCode 1406. 石子游戏 III(DP)
1. 题目 Alice 和 Bob 用几堆石子在做游戏.几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出. Alice 和 Bob 轮流取石子,Alice 总是先开始.在每 ...
- LeetCode 1690.石子游戏VII
LeetCode 1690.石子游戏VII 问题描述: 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排.每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的 ...
- LeetCode 1140. 石子游戏 II(DP)*
文章目录 1. 题目 2. 解题 1. 题目 亚历克斯和李继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 亚历克斯和李轮流进行,亚 ...
- LeetCode 1140.石子游戏 II
题目描述 爱丽丝和鲍勃继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 爱丽丝和鲍勃轮流进行,爱丽丝先开始.最初,M = 1. 在每 ...
最新文章
- 回首2018 | 分析型数据库AnalyticDB:不忘初心 砥砺前行...
- 计算机组成原理延迟时间ty,计算机组成原理之数值的机器运算培训教程方案.ppt...
- SAP Spartacus component-wrapper自定义指令的实现
- .net pdf转图片_图片转PDF怎么转?推荐两种图片转PDF方法
- Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例
- C++设计模式-Facade模式
- kickstart模式实现批量安装centos7.x系统
- Node.js是什么?
- iphone7home键按压失灵_iPhone home键失灵怎么办 iPad home键失灵解决办法【详解】
- 动易模板制作示例(三)
- NVMe驱动解析-DMA传输
- 标准贴片电阻电容的焊接方法
- ultraedit25版本设置文本自动换行方法
- 产品读书《AI进化论:解码人工智能商业场景与案例》
- 论文翻译解读:Logmap:Logic-based and scalable ontology matching
- 超详细——入门Github的代码上传
- 127.0.0.1 拒绝了我们的连接请求--访问本地IP时显示拒绝访问
- [2023最新]美少妇Metasploit(MSF)下载安装及使用详解,永久免费使用,环境配置和使用技巧指南
- 参与 DDoS 攻击的物联网设备类型分布
- surface pro linux服务器,在Surface Pro上安装Ubuntu