
动态规划—区间dp
文章平均质量分 76
Ezereal
这个作者很懒,什么都没留下…
展开
-
POJ 2955 Brackets (基础)
经典的区间DP dp[i][j]代表i->j区间内最多的合法括号数 状态转移方程: if(s[i]=='('&&s[j]==')'||s[i]=='['&&s[j]==']') dp[i][j]=dp[i+1][j-1]+2;dp[i][j]=max{dp[i][k]+dp[k+1][j]};#include #include #include #include原创 2016-03-26 15:39:48 · 283 阅读 · 0 评论 -
zoj 3469 Food Delivery (好题)
题目描述: 在x轴上有n个客人叫外卖,每个顾客因为追的番更新进度不同,所以在等外买的时间里每秒增加的愤怒值不同。给出客人和餐厅的位置,以及客人每分钟增加的愤怒值,还有快递小哥的行走一公里需要的时间。问送完外卖后n个客人的最小愤怒值? 解题思路: 把餐厅所在的点加进去,然后按照在x轴上的位置排序。从餐厅所在位置向左右开始DP dp[i][j][0]表示从i到j用户送到最小不开原创 2016-03-26 17:07:36 · 550 阅读 · 1 评论 -
Codeforces Round #336 (Div. 2) D. Zuma
区间dp #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; #define L(i) i<<1 #define R(i) i<<1|1 #defi原创 2016-05-03 17:17:11 · 369 阅读 · 0 评论 -
POJ 3280 (区间DP)
题目大意是说一个字符串,每插入或者删除一个字符都需要一定的代价,问怎样可以使这个字符串变成一个回文串,且花费最小。 首先明确的就是如果已经将区间[i,j]整理成为一个回文串(不管中间有多少个字符或者是以什么字符开头或者结尾),当DP到区间[i,j+1]时,我们可以在i-1的位置添加一个str[j+1]字符,或者将在j+1处的字符删除,得到一个新的回文串,而且我们这两步操作都没有借助或者影响区间[原创 2016-07-30 10:07:01 · 263 阅读 · 0 评论 -
HDU 2476 String painter(动态规划)★
题目大意是给定一个起始串和一个目标串,然后每次可以将某一段区间染成一种字符,问从起始串到目标串最少需要染多少步? 读完题首先会想到的自然是用区间dp,但是列出来发现,没办法区间合并。因为一旦需要考虑对某一段成段染色的话,在区间合并的时候,就无法考虑转移过程中起始串的变化了。 既然这样,就不考虑成段染色造成的影响了,就当起始串和目标串处处不想等。 那么考虑区间[i, i+len], 自然遍历转载 2016-07-30 11:27:21 · 461 阅读 · 0 评论 -
Uva 10003 Cutting Sticks (区间dp)
题意: 有一根长度为l的木棍,木棍上面有m个切割点,每一次切割都要付出当前木棍长度的代价,问怎样切割有最小代价 题解:dpij代表切割小木棍i到j的最优费用,然后枚举第一次切割位置即可(这里不能枚举最后一次切割,因为不好递推)。 #include #include #include #include #include #include #include #include #in原创 2016-07-30 14:33:06 · 311 阅读 · 0 评论 -
LightOJ 1422 Halloween Costumes 区间DP
题意:给你n天分别要穿的衣服,可以套着穿,但是一旦脱下来就不能再穿了,问这n天要准备几件衣服。 dp[i][j]为第i天到第j天要穿的最少衣服,考虑第i天,如果后面的[i+1, j]天的衣服不要管,那么dp[i][j] = dp[i + 1][j] + 1。 然后在区间[i +1, j]里面找到和第i天衣服一样的日子,尝试直到那天都不把i脱掉, 那么就变成dp[i][j] = dp[原创 2016-07-30 15:00:01 · 258 阅读 · 0 评论 -
HDU 4283 You Are the One (区间DP)
题目:有一个队列,每个人有一个愤怒值D,如果他是第K个上场,不开心指数就为(K-1)*D。但是边上有一个小黑屋(其实就是个堆栈),可以一定程度上调整上场程序 题目中堆栈的寓意在于指明此题可以用区间dp,因为一段区间是连续的,dp[i][j]表明从i到j的人占据了第1到第j-i+1的名次 dp[i][j]表示从第i个人到第j个人这段区间的最小花费(是只考虑这j-i+1个人,不需要考虑前面有多少人原创 2016-07-30 15:59:49 · 314 阅读 · 0 评论 -
2016 ACM/ICPC Reginal Shengyang hdu 5900 QSC and Master (老是忘记枚举第三层循环)
题意: 给出n(nkey,value> 如果相邻两个pair的key不互素,那么可以将这两个pair拿取,得分加上两个value。 问最大得分。 题解: dp【330】【330】【2】分别代表i到j区间不一定消完和一定消完的最大价值,然后区间dp即可。 尴尬的是,我又忘记第三层循环,卡到死。。。 #include #include #include #include原创 2016-09-19 08:59:00 · 480 阅读 · 0 评论