您的位置:首页 > 其它

区间DP总结

2016-04-07 11:33 183 查看
做了几题区间动态规划的题目,觉得区间动态规划的题目是有点难的。区间DP大概是这一类的动态规划,在一个线性的数据上对区间进行状态转移,dp[i][j]表示i到j的区间。dp[i][j]可以由子区间的状态转移而来,关键是dp[i][j]表示的是什么,然后去找dp[i][j]和子区间的关系。要知道,在求dp[i][j]之前,i到j之间的子区间都已经求出来最优解。

一点一点说吧!

首先我觉得首先区间DP的应用要先想到回文串的,包括一个字符串的最长的非连续的回文串,一个字符串非连续的回文串的数目。因为回文串的特点对应的两端字符是相等的,所以状态是可以转移的,先看一道求一个字符串中回文串的数目:

HDU 4632

题解:

http://blog.csdn.net/Dacc123/article/details/50886011

接下来就是求回文串的最长的长度问题

HDU 4745

这道题目是在求区间最长的回文串长度升级一下,序列是一条链。这里可以用倍增的方法。状态转移方程:

dp[i][j]= max ( dp[i+1][j], max ( dp[i][j-1],

( a[i]==a[j] ? dp[i+1][j-1] + 2 : dp[i+1][j-1] ) ) );就是在dp[i+1][j],dp[i][j-1],dp[i+1][j-1]三个子区间求最大值。

题解:

/article/9576428.html

这道题和前面的比较,求最长的长度是在dp[i+1][j],dp[i][j-1],dp[i+1][j-1]三个子区间里进行比较,而求数量,则是把求子区间的和。这两道的题目的子区间只涉及到dp[i+1][j],dp[i][j-1],dp[i+1][j-1],并没有在i到j之间进行区间划分,这是因为回文串的特性。

下面看划分区间的区间DP问题:

题目链接

http://poj.org/problem?id=2955

这是一道简单的区间划分dp题目

求最长的匹配括号的长度,划分区间是没有条件的,从i到j区间内任何一点都可以划分,dp[i][j]=max(dp[i][k]+dp[k+1][j]){k=i….j}

题解:

/article/9576425.html

题目链接

http://poj.org/problem?id=1651

题解:

/article/9576426.html

题目链接

http://lightoj.com/login_main.php?url=volume_showproblem.php?problem=1422

状态转移方程是要在i到j区间之间进行区间划分。你可以从左端点开始,也可以从右端点开始。只有当k等于左端点或者右端点的时候才可以划分。因为这样的话,第k天就不用穿新衣服,少买了一件,这也是得到最优解的关键,

题解:

/article/9576440.html

再看这道题目的升级版

http://acm.hdu.edu.cn/showproblem.php?pid=2476

在前面的基础上,再进行一次区间DP

题解:

/article/9576404.html

再看一道难度增加的区间划分

题目:

http://acm.hdu.edu.cn/showproblem.php?pid=4283

这道题目在划分区间之后,要计算因为状态改变,而改变的不满意值

题解:

/article/9576423.html

有时候区间DP的状态要根据题目有不同的形式,不仅是二维数组表示区间,也可以加其他维,表示不同的状态。

题目链接

/article/9576426.html

这道题目用来四维数组,另外两维表示左边和右边的颜色种类

题解:

/article/9576450.html

题目链接

http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3469

三维数组,第三维表示快递小哥在区间的哪一边?

题解:

/article/9576451.html

最优三角划分:

http://www.icpc.moe/onlinejudge/showProblem.do?problemCode=3537

这个题目要先用凸包算法判断凸包,然后再进行区间划分,进行DP

题解:

/article/9576435.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: