区间DP的思路(摘自NewErA)及自己的心得
以下为摘要
区间dp能解决的问题就是通过小区间更新大区间,最后得出指定区间的最优解
个人认为,想要用区间dp解决问题,首先要确定一个大问题能够剖分成几个相同较小问题,且小问题很容易组合成大问题,从而从解决小问题逐渐解决大问题,体现的其实是分治的思想,只不过是通过dp用递推的方式解决了。比如floyd现在看来也属于区间dp 的一种。
然后是自己的理解及几个例子
区间DP,思路在于由小区间刷新大区间,具体做法是:
最外层循环枚举区间长度(从小到大,先计算小区间来刷新大区间)
第二层枚举大区间起点i
依据起点和长度计算终点j
第三层循环在i与j中枚举k,即为把大区间分为两个小区间的断点
依题意计算,取较大值刷新大区间
以下是几个例子:
P1063 能量项链
for(int len = 2;len <= num + 1;len++){
for(int i = 1;i + len - 1 <= 2 * num/*j不能超过总数*/;i++){
int j = i + len - 1;
//dp[i][j] = 0;
for(int k = i + 1;k < j;k++){
dp[i][j] = max(dp[i][j],dp[i][k] + dp[k][j] + a[i] * a[k] * a[j]);
}
}
}
P1880 石子合并
for(int len = 2;len <= num;len++){
for(int i = 1;i <= num * 2 - (len - 1);i++){
int j = i + len - 1;
d1[i][j] = 0;
d2[i][j] = 99999999;
for(int k = i;k < j;k++){
//cout<<d2[i][k] + d2[k + 1][j] + mmp[i][j]<<endl;
d1[i][j] = max(d1[i][j],d1[i][k] + d1[k + 1][j] + mmp[i][j]);
d2[i][j] = min(d2[i][j],d2[i][k] + d2[k + 1][j] + mmp[i][j]);
}
}
}
P2904 [USACO08MAR]跨河(这个有区间DP思想,但方法步骤不同)
dp[0] = 0;
for(int i = 1;i <= num;i++){
for(int j = 1;j <= i;j++){
//cout<<"i= "<<i<<endl;
//cout<<dp[i]<<" "<<dp[i - j] + tim[j]<<endl;
dp[i] = min(dp[i],dp[i - j] + tim[j]);//分为j和i-j两部分,螺旋枚举,找最小;
}
}
具体代码参见测评记录
区间DP的思路(摘自NewErA)及自己的心得的更多相关文章
- HDU 4632 Palindrome subsequence & FJUT3681 回文子序列种类数(回文子序列个数/回文子序列种数 容斥 + 区间DP)题解
题意1:问你一个串有几个不连续子序列(相同字母不同位置视为两个) 题意2:问你一个串有几种不连续子序列(相同字母不同位置视为一个,空串视为一个子序列) 思路1:由容斥可知当两个边界字母相同时 dp[i ...
- BZOJ 4380 Myjnie 区间DP
4380: [POI2015]Myjnie Time Limit: 40 Sec Memory Limit: 256 MBSec Special JudgeSubmit: 162 Solved: ...
- Pangu and Stones(HihoCoder-1636)(17北京OL)【区间DP】
题意:有n堆石头,盘古每次可以选择连续的x堆合并,所需时间为x堆石头的数量之和,x∈[l,r],现在要求,能否将石头合并成一堆,如果能,最短时间是多少. 思路:(参考了ACM算法日常)DP[i][j] ...
- 【P1588】丢失的牛——区间dp/bfs
(题面来自Luogu) 题目描述 FJ丢失了他的一头牛,他决定追回他的牛.已知FJ和牛在一条直线上,初始位置分别为x和y,假定牛在原地不动.FJ的行走方式很特别:他每一次可以前进一步.后退一步或者直接 ...
- 浅谈区间DP的解题时常见思路
一.区间DP解题时常见思路 如果题目中答案满足: 大的区间的答案可以由小的区间答案组合或加减得到 大的范围可以由小的范围代表 数据范围较小 我们这时可以考虑采用区间DP来解决. 那么常见的解法有两种: ...
- hdu 5181 numbers——思路+区间DP
题目:http://acm.hdu.edu.cn/showproblem.php?pid=5181 题解:https://www.cnblogs.com/Miracevin/p/10960717.ht ...
- Codeforces 958C3 - Encryption (hard) 区间dp+抽屉原理
转自:http://www.cnblogs.com/widsom/p/8863005.html 题目大意: 比起Encryption 中级版,把n的范围扩大到 500000,k,p范围都在100以内, ...
- 区间dp总结篇
前言:这两天没有写什么题目,把前两周做的有些意思的背包题和最长递增.公共子序列写了个总结.反过去写总结,总能让自己有一番收获......就区间dp来说,一开始我完全不明白它是怎么应用的,甚至于看解题报 ...
- 2016 年沈阳网络赛---QSC and Master(区间DP)
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=5900 Problem Description Every school has some legend ...
随机推荐
- Java将json字符串转成map
Map<String, Object> map = (Map<String, Object>) JSONUtils.parse(result)
- 实验三 敏捷开发与XP实践 实验报告 20135232王玥
一.实验内容 1. XP基础 2. XP核心实践 3. 相关工具 二.实验要求 1.没有Linux基础的同学建议先学习<Linux基础入门(新版)><Vim编辑器> 课程 2. ...
- 20172329 2018-2019 《Java软件结构与数据结构》实验三报告
20172329 2018-2019-2 <Java软件结构与数据结构>实验三报告 课程:<Java软件结构与数据结构> 班级: 1723 姓名: 王文彬 学号:2017232 ...
- WebGL学习笔记五
本章主要是对纹理的进一步讲解,我们很多时候需要将现实中已有 的图片在网页中展示出来而不是去创造图片,通过纹理 我们可以将光栅化的图形和图片纹理形成映射并且将图片在图形 中显示出来.基本过程与前几章一致 ...
- java 对象和基本数据类型 “==”区别
“==”比较的是地址,牢记.1.对象.integer 是对象 Integer i1 = 20; Integer i2 = 20 ; System.out.println(i1 == i2); // t ...
- Gradle入门(4):依赖管理
在现实生活中,要创造一个没有任何外部依赖的应用程序并非不可能,但也是极具挑战的.这也是为什么依赖管理对于每个软件项目都是至关重要的一部分. 这篇教程主要讲述如何使用Gradle管理我们项目的依赖,我们 ...
- C# 通过http post 请求上传图片和参数
一.C# Winform或控制台 /// <summary> /// 通过http上传图片及传参数 /// </summary> /// <param name=&quo ...
- 修改shell命令的history记录个数
修改history记录的命令如下所示:# vi /etc/profile 找到histsize=1000,将其改为histsize=100(这条可根据实际情况而定). 不重启系统就可让其生效,如下所示 ...
- pyqt5 eric6
1 安装Anaconda3 2 python环境变量改为Anaconda3中python 3 pip安装pyqt5 ,pip安装pyqt5-tool 其中tool中包含eric6 ui文件必须使用的d ...
- [转]跨平台开发:PhoneGap移动开发框架初探
目前,随着Google的Android手机和苹果的iphone手机的逐渐普及,越来越多开发者加入到移动应用开发的大军当中.其中,Android应用是基于Java语言基础上进行开发的,而苹果公司的iph ...