![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
区间DP
区间DP
River_____________
这个作者很懒,什么都没留下…
展开
-
石子合并问题(区间DP)
有n堆石子,要合并成一堆,规则是只能和相邻的合并,每次合并的代价是合并出的石子堆的石子数量,求最小花费。IN:4 4 4 5 9OUT:43直接贪心只能取到局部的最佳结果。方程是很明显的,dp[i][j] = min(dp[i][j] , dp[i][k] + dp[k+1][j] + sum[j] - sum[i] + s[i];dp数组代表合并从i到j的原创 2017-08-14 17:31:17 · 216 阅读 · 0 评论 -
LOJ 1422(区间DP)
转移方程 dp[i][j] = min(dp[i+1][j] + 1 , dp[i+1][k-1] + dp[k][j]);dp数组代表i到j最少需要多少件衣服。k 代表在i+1到j内符合 s[i] = s[k] 的k值;如果k值不存在那么 等于上一个区间加上一件新衣服。#include #define INF 0x3f3f3fusing namespace std;原创 2017-08-14 19:32:22 · 361 阅读 · 0 评论 -
POJ-2955(区间DP)
题意:给出一个串,求里面最多有多少个括号可以匹配。区间DP : dp[i][j] = max(dp[i+1][k-1] + dp[k+1][j] , dp[i][j]) (i #include using namespace std;////////////////////////////////////////////////////const int maxn =原创 2017-09-05 15:39:33 · 166 阅读 · 0 评论 -
POJ-1651(区间DP)
方程: dp[i][j] = min(dp[i][k] + dp[k][j] + a[i] * a[k] * a[j] , dp[i][j] ) #include #include #include #include #include #define INF 0x3f3f3f3fusing namespace std;const int maxn = 100+5;int a原创 2017-09-05 16:40:34 · 196 阅读 · 0 评论 -
HDU-4283(区间DP)
每个人都有DIAOSI 值 , 每个人产生的愤怒值 为 上场的时刻 (k-1) * a[i] (k-1) * D 想成了 k * D一直没看出来。。。每个人的出场次序都是不确定的,从小到大扩展的时候,对于区间 [i,j] 而言考虑 i 位置的元素的出场时刻,可能出现的 k 为i 到 j , 那么i可能上场的时刻 为 k-i到 j-i+1对于每个区间不用考虑在整个区间中的出现次序,原创 2017-09-06 15:12:33 · 274 阅读 · 0 评论 -
HDU-2476(区间DP)
题意:给出两个字符串,目标是把第一个串变成第二个串,可以进行的操作是选择l,r (0 一开始没有思路,看了题解才知道是区间DP。。。首先预处理出从空串到目标串的最小步数用dp[i][j]保存从i到j的最小步数。然后求pre的最小步数。#include #include #include #include #include #define INF 0x3f3f3f3fusin原创 2017-09-07 17:09:42 · 404 阅读 · 0 评论 -
UVA_11400(区间DP)
给定n种类型灯泡,每个灯泡给出其电压v,电源花费k,每个灯的花费c和需求量l,可以把电压小的灯泡换成相同数量的电压比它大的灯泡来减小花费,求最小的花费。对于一种灯泡而言,要么不换,要么全换,因为如果只换一个灯泡可以减小花费的话,那么换多个一定也可以减小花费。另一个就是向高电压的转换一定是连续的,因为如果出现不连续的情况的话1,2,3,4,5如果2号位置由4灯泡替代,1,4和3号位置都是原创 2017-10-12 15:55:07 · 211 阅读 · 0 评论