思路:用dp[i][j]表示i到j的区间和,用res[i][j]表示本次操作后该选手在i与j区间获得的最大价值差,所以无论是爱丽丝还是鲍勃,在每次操作时都是为了获得最大价值差,才能保证题意,即爱丽丝无限度扩大差值,鲍勃尽力减小差值。在最初的时候i==j,即res[i][j]=0;当j-i==1时,为了获得最大价值差,我们删除一个较小的石头,得到最大的,即res[i][j]=max(stones[i],stones[j]);当j-i>1时,最大价值差就是取删掉左端石头与删掉右端石头二者的最大值,具体的状态方程时res[i][j]=max(dp[i+1][j]-res[i+1][j],dp[i][j-1]-res[i][j-1]),我们可以从开始时理解这个方程,i==j时res[i][j]=0,j-i==1时res[i][j]=max(stones[i],stones[j])=dp[i][j]-min(stones[i],stones[j])+res[j][j],j-i>1时res[i][j]=max(dp[i+1][j]-res[i+1][j],dp[i][j-1]-res[i][j-1]),对于dp[i+1][j]-res[i+1][j]理解成删除左端石头后,获得的最大差值为当前区间和减去这次操作后下一个人获得的最大差值(即此时的区间和减去这次操作之后)。

class Solution {
public:int stoneGameVII(vector<int>& stones) {int n=stones.size();vector<vector<int>>res(n,vector<int>(n,0));vector<vector<int>>dp(n,vector<int>(n,0));for(int i=0;i<n;i++){for(int j=i;j<n;j++){if(i==j) dp[i][j]=stones[i];else dp[i][j]=dp[i][j-1]+stones[j];}}for(int i=n-1;i>=0;i--){for(int j=i+1;j<n;j++){if(j-i==1) res[i][j]=max(stones[i],stones[j]);else res[i][j]=max(dp[i+1][j]-res[i+1][j],dp[i][j-1]-res[i][j-1]);}}return res[0][n-1];}
};

动态规划:5627、石子游戏VII相关推荐

  1. Leetcode1690. 石子游戏 VII[C++题解]:带有博弈论的区间dp

    文章目录 题目分析 状态表示 状态转移 题目链接 题目分析 补充博弈论的做题想法:让最坏情况下最好.在很多决策中,考虑所有的最坏情况,选其中最好的一个. 本题分析: 刚开始因为是个贪心题目,两个人每次 ...

  2. LeetCode 1690.石子游戏VII

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

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

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

  4. Python每日一练(20230510) 石子游戏 VII\VIII\IX

    目录 1. 石子游戏 Stone Game VII 2. 石子游戏 Stone Game VIII 3. 石子游戏 Stone Game IX

  5. 【数据结构与算法】之深入解析“石子游戏VII”的求解思路与算法示例

    一.题目描述 石子游戏中,爱丽丝和鲍勃轮流进行自己的回合,爱丽丝先开始 . 有 n 块石子排成一排,每个玩家的回合中,可以从行中 移除 最左边的石头或最右边的石头,并获得与该行中剩余石头值之和相等的得 ...

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

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

  7. leetcode——石子游戏系列题目

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

  8. LeetCode-877 石子游戏

    动态规划 LeetCode-877 石子游戏 题目链接:LeetCode-877 题目大意:从一排石子堆最左面或者最右面取石子 每次一堆必须全部取走 最后石子总数多的获胜 问最后先手可不可以获胜 解题 ...

  9. 动态规划---石子游戏

    动态规划---石子游戏 石子游戏(leetcode877) 石子游戏(leetcode1140) 石子游戏(leetcode1686) 石子游戏(leetcode877) 题目描述 亚历克斯和李用几堆 ...

最新文章

  1. ntp服务器源码c语言,搭建自己的NTP时间服务器
  2. python写用用户名密码程序_Python创建用户名和密码程序
  3. SSRS:服务器更名后,ReportingService无法使用和登录的解决办法
  4. 设计模式之【抽象工厂模式】
  5. C++函数模板(二)引用
  6. 关于AppCompatDelegate的使用
  7. 四大组建进程间通信--基础
  8. java定义接口_一文知道Java中接口的定义
  9. iview table 方法若干
  10. vs2008试用期到期解决办法
  11. 实现 iOS UICollectionView的事件透传
  12. C#面向对象封装继承多态
  13. vue倒计时翻页插件
  14. MVX相关设计模式的理解。
  15. echarts去除x轴和y轴上的刻度值_Echarts实现隐藏x轴,y轴,刻度线,网格
  16. lighttpd移植
  17. 如何使用RedisTemplate访问Redis数据结构
  18. MYSQL安装完成后,需要手动安装workbench
  19. notifyDataSetInvalidated()和notifyDataSetChanged()有什么区别?
  20. SeekBarVolumizer.java

热门文章

  1. ftp 550 Failed to change directory
  2. 零基础入门STM32编程——GPIO(五)
  3. 用matlab在图片上画出网格
  4. 当“老赖” 遇到大数据
  5. 【Java开发常用软件整理】
  6. Android 之 动画合集之属性动画 -- 又见
  7. A 8b Time-Interleaved Time-Domain ADC with Input-Independent Background Timing Skew Calibration
  8. idea调试需要的快捷键_IDEA调试常用快捷键
  9. OTT TV影音系统如何做到不丢帧、不卡顿、不花屏
  10. 乐观锁的作用(php代码实现)