
区间DP
FrostMonarch
这个作者很懒,什么都没留下…
展开
-
codeforces 1312 e Array Shrinking(区间DP)
题目大意:数列中相同的两个数可以合并,合并后为原来的数字加1,请问数列最短的长度。n<=500.解题思路:很自然地我们想到用dp[l][r]来记录区间[l,r]中最短的长度。然后我们开始枚举区间中间的点k。但是这里有一点不同,因为这里存在区间合并的可能性,所以我们需要询问一下,假如dp[l][k]==1 && dp[k+1][r]==1 && ...原创 2020-03-12 11:43:35 · 348 阅读 · 0 评论 -
洛谷 P1018 乘积最大(区间DP)
题目大意:有一串数字,我们要求出怎么在里面插入乘号,可以使得总乘积最大。解题思路:暴力不可行,这里我们用区间DP,所谓的区间DP就是状态里面包含有区间的端点,然后不断推。这里的转移方程为:for i l->n-1: dp[l][k]=max(dp[l][k],dp[i+1][k-1]*no)其中,dp[l][k]表示左端点在l处时还可以划分为k段的时候最大乘积...原创 2019-12-07 19:48:38 · 289 阅读 · 0 评论 -
leetcode 1278 分割回文串 III (区间DP)
题目大意:有一个字符串,我们可以对其任意字符作变更。现在我们想把字符串切成k个回文串,问我们最少需要换多少个字符。解题思路:这种区间切割问题,应该需要联想到区间DP,考虑设立状态dp[l][k]表示起始点为l时候还需要划分k个字符时我们需要替换的最少字符数。可以写出伪代码:for i l->n-1: dp[l][k]=min(dp[l][k],cost[l][i]+...原创 2019-12-05 20:48:35 · 328 阅读 · 0 评论 -
洛谷 P1040 加分二叉树(树形DP,树的遍历)
题目大意:已知树的中序遍历,而且知道树中的节点的分值,问怎么先序遍历这棵树使得分值最大,分值计算方法:本节点分值=左子树分值*右子树分值+本节点分值。空子树分值规定为1.解题思路:这题给的数据范围是30,很自然地我们可以使用暴力拆,以区间[l,r]作为dfs(深度优先遍历)的参数,每次枚举[l,r]中一点作为根,然后计算分值,但是注意边界情况,分别是空子树, l==r 还有 r...原创 2019-07-29 22:02:21 · 206 阅读 · 0 评论 -
洛谷 P1026 统计单词个数(区间DP 暴力)
题目大意:有一个单词串An,可以把单词串分成k份,定义区间单词数如下:已知有一个单词字典如:apple,hi.....在串中的单词数:然后在串中统计有多少个单词,唯一注意的是,若串中某个字母作为单词首字母用了,那么这个串中的字母就不能作为下一个单词的首字母。例如:thise字典中有单词this 和 thise那么这个串中只能有this或者thise,而不能两个单词都存在...原创 2019-08-27 00:28:52 · 233 阅读 · 0 评论 -
洛谷 P1220 关路灯(记忆化DP,区间DP)
题目大意:有n个路灯,每个路灯都有各自的位置ai,以及功率bi,已知小明站在某个c路灯处,小明的步行速率是1m/s,问我们小明怎么关灯使得我们的电量消耗最少。解题思路:首先,我们发现小明关灯肯定是关掉一个区间的灯,毕竟不可能小明路过一个灯不去关它,这是毫无益处的,所以这里我们考虑转换为区间DP,所以可以有状态 [l][r],其中l,r分别表示所在的路灯的编号,这个状态表示在[l][r]...原创 2019-09-24 22:55:13 · 215 阅读 · 0 评论