动态规划 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 石子游戏相关推荐

  1. LeetCode 877. 石子游戏

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

  2. leetcode —— 877. 石子游戏

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

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

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

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

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

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

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

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

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

  7. LeetCode 1406. 石子游戏 III(DP)

    1. 题目 Alice 和 Bob 用几堆石子在做游戏.几堆石子排成一行,每堆石子都对应一个得分,由数组 stoneValue 给出. Alice 和 Bob 轮流取石子,Alice 总是先开始.在每 ...

  8. LeetCode 1690.石子游戏VII

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

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

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

  10. LeetCode 1140.石子游戏 II

    题目描述 爱丽丝和鲍勃继续他们的石子游戏.许多堆石子 排成一行,每堆都有正整数颗石子 piles[i].游戏以谁手中的石子最多来决出胜负. 爱丽丝和鲍勃轮流进行,爱丽丝先开始.最初,M = 1. 在每 ...

最新文章

  1. 回首2018 | 分析型数据库AnalyticDB:不忘初心 砥砺前行...
  2. 计算机组成原理延迟时间ty,计算机组成原理之数值的机器运算培训教程方案.ppt...
  3. SAP Spartacus component-wrapper自定义指令的实现
  4. .net pdf转图片_图片转PDF怎么转?推荐两种图片转PDF方法
  5. Kubernetes中分布式存储Rook-Ceph的使用:一个ASP.NET Core MVC的案例
  6. C++设计模式-Facade模式
  7. kickstart模式实现批量安装centos7.x系统
  8. Node.js是什么?
  9. iphone7home键按压失灵_iPhone home键失灵怎么办 iPad home键失灵解决办法【详解】
  10. 动易模板制作示例(三)
  11. NVMe驱动解析-DMA传输
  12. 标准贴片电阻电容的焊接方法
  13. ultraedit25版本设置文本自动换行方法
  14. 产品读书《AI进化论:解码人工智能商业场景与案例》
  15. 论文翻译解读:Logmap:Logic-based and scalable ontology matching
  16. 超详细——入门Github的代码上传
  17. 127.0.0.1 拒绝了我们的连接请求--访问本地IP时显示拒绝访问
  18. [2023最新]美少妇Metasploit(MSF)下载安装及使用详解,永久免费使用,环境配置和使用技巧指南
  19. 参与 DDoS 攻击的物联网设备类型分布
  20. surface pro linux服务器,在Surface Pro上安装Ubuntu

热门文章

  1. ListView聊天窗口与输入法键盘冲突解决方法(聊天框在viewpager里)
  2. Debian上安装openoffice
  3. [转贴]国内十大破解论坛
  4. 关于AMD几款 CPU开核原理及其建议
  5. adblock屏蔽带空格的class
  6. 空调温控器方案芯片DSH550
  7. 易语言制作大漠模块API进程结束
  8. 大数据技术之Flink理论到项目
  9. 你用esp8266做出过什么有趣的东西?
  10. 【CSDN 2022年度征文】不负韶光,以梦为马