news 2026/5/7 19:43:39

【算法日记】Day 10 动态规划专题——区间DP之基于两侧端点的讨论

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【算法日记】Day 10 动态规划专题——区间DP之基于两侧端点的讨论

Abstract#动态规划#区间DP#博弈

1. 题目

  • 题目:LeetCode 486. 预测赢家
  • 核心思路:两人轮流从数组两端取数,最终分数高者赢。定义f(l, r)表示在子数组nums[l…r]中当前先手玩家能获得的最大分数。转移时,若取左端nums[l],则对手会在[l+1, r]中成为先手,且对手会采取最优策略使当前玩家后续得分最小,所以当前玩家总得分为nums[l] + min(f(l+1, r-1), f(l+2, r));取右端同理。最终先手得分first = f(0, n-1),后手得分second = sum - first,若first >= second则先手赢。
  • 复杂度:时间复杂度O ( n 2 ) O(n²)O(n2),空间复杂度O ( n 2 ) O(n²)O(n2)(可空间压缩至O ( n ) O(n)O(n))。

2. 代码

classSolution{public:intf(vector<int>&nums,vector<vector<int>>&dp,intl,intr){if(dp[l][r]!=-1)returndp[l][r];intn=nums.size(),ans;if(l==r)ans=nums[l];elseif(l==r-1)ans=max(nums[l],nums[r]);else{intp1=nums[l]+min(f(nums,dp,l+1,r-1),f(nums,dp,l+2,r));intp2=nums[r]+min(f(nums,dp,l+1,r-1),f(nums,dp,l,r-2));ans=max(p1,p2);}dp[l][r]=ans;returnans;}boolpredictTheWinner(vector<int>&nums){intsum=0;for(autonum:nums){sum+=num;}vector<vector<int>>dp(25,vector<int>(25,-1));intfirst=f(nums,dp,0,nums.size()-1);intsecond=sum-first;returnfirst>=second?true:false;}};

3. 心得

  • 区间DP思想:将大范围问题拆解成若干小范围上的问题求解,这里的小范围问题是大范围问题的重叠子问题。这种拆解方法总是基于分情况讨论的思想而得出的,就区间DP而言有两种讨论思路:一是基于两侧端点的可能性展开(如本题无论是从情景还是从分析过程,都是在左右两侧端点操作的);二是基于范围中的划分点展开(具体题目见明日再学)。

  • 博弈DP中的min理解:当前玩家取走一个数后,对手在剩余区间成为先手,且对手会最大化自己的分数,等价于让当前玩家在后续中得到尽可能小的分数。因此转移时要取min,而不是max。

4. 相关题目

  • LeetCode 1312. 让字符串成为回文串的最少插入次数
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/10 9:02:26

SiameseUIE模型解析:从原理到部署全解读

SiameseUIE模型解析&#xff1a;从原理到部署全解读 1. 引言 信息抽取是自然语言处理中的核心任务之一&#xff0c;它能够从非结构化的文本中提取出结构化的信息。传统的抽取模型通常需要针对每个任务进行专门的训练&#xff0c;这不仅耗时耗力&#xff0c;而且难以适应新的抽…

作者头像 李华
网站建设 2026/4/10 9:00:54

Windows热键冲突终极解决方案:Hotkey Detective使用指南

Windows热键冲突终极解决方案&#xff1a;Hotkey Detective使用指南 【免费下载链接】hotkey-detective A small program for investigating stolen key combinations under Windows 7 and later. 项目地址: https://gitcode.com/gh_mirrors/ho/hotkey-detective 你是否…

作者头像 李华
网站建设 2026/4/10 9:00:52

如何在3分钟内掌握JPEXS Flash反编译器的核心功能

如何在3分钟内掌握JPEXS Flash反编译器的核心功能 【免费下载链接】jpexs-decompiler JPEXS Free Flash Decompiler 项目地址: https://gitcode.com/gh_mirrors/jp/jpexs-decompiler 你是否曾经面对一个陈旧的SWF文件&#xff0c;想要提取里面的图片、声音或者修改Actio…

作者头像 李华
网站建设 2026/4/10 8:59:55

千问3.5-2B智能面试官:模拟Java八股文与技术面试实战

千问3.5-2B智能面试官&#xff1a;模拟Java八股文与技术面试实战 1. 为什么需要智能面试模拟系统 Java开发者求职路上&#xff0c;技术面试始终是道坎。传统备考方式存在几个明显痛点&#xff1a;自己刷题缺乏互动反馈、找人模拟成本高、面试题库更新不及时。这些问题导致很多…

作者头像 李华
网站建设 2026/4/10 8:58:12

PaddlePaddle-v3.3镜像问题解决:Jupyter启动报错全攻略

PaddlePaddle-v3.3镜像问题解决&#xff1a;Jupyter启动报错全攻略 1. 问题背景与诊断 当你满怀期待地部署好PaddlePaddle-v3.3镜像&#xff0c;准备开始深度学习之旅时&#xff0c;Jupyter Notebook却拒绝启动——这可能是最令人沮丧的体验之一。作为百度开源的深度学习平台…

作者头像 李华
网站建设 2026/4/10 8:52:41

终极指南:如何快速配置PotPlayer百度翻译插件实现实时字幕翻译

终极指南&#xff1a;如何快速配置PotPlayer百度翻译插件实现实时字幕翻译 【免费下载链接】PotPlayer_Subtitle_Translate_Baidu PotPlayer 字幕在线翻译插件 - 百度平台 项目地址: https://gitcode.com/gh_mirrors/po/PotPlayer_Subtitle_Translate_Baidu 前言 你是否…

作者头像 李华