【DP专辑】ACM动态规划总结
转载请注明出处,谢谢。 http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日
动态规划一直是ACM竞赛中的重点,同一时候又是难点,由于该算法时间效率高,代码量少,多元性强,主要考察思维能力、建模抽象能力、灵活度。
本人动态规划博客地址:http://blog.csdn.net/cc_again/article/category/1261899
******************************************************************************************
动态规划(英语:Dynamic
programming,DP)是一种在数学、计算机科学和经济学中使用的,通过把原问题分解为相对简单的子问题的方式求解复杂问题的方法。
动态规划经常适用于有重叠子问题和最优子结构性质的问题,动态规划方法所耗时间往往远少于朴素解法。
动态规划背后的基本思想很easy。大致上,若要解一个给定问题,我们须要解其不同部分(即子问题),再合并子问题的解以得出原问题的解。 通常很多子问题很相似,为此动态规划法试图只解决每一个子问题一次,从而降低计算量: 一旦某个给定子问题的解已经算出,则将其记忆化存储,以便下次须要同一个子问题解之时直接查表。
这样的做法在反复子问题的数目关于输入的规模呈指数增长时特别实用。
动态规划问题满足三大重要性质
最优子结构性质:假设问题的最优解所包括的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决这个问题提供了重要线索。
子问题重叠性质:子问题重叠性质是指在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被反复计算多次。动态规划算法正是利用了这样的子问题的重叠性质,对每个子问题仅仅计算一次,然后将其计算结果保存在一个表格中,当再次须要计算已经计算过的子问题时,仅仅是在表格中简单地查看一下结果,从而获得较高的效率。
无后效性:将各阶段依照一定的次序排列好之后,对于某个给定的阶段状态,它曾经各阶段的状态无法直接影响它未来的决策,而仅仅能通过当前的这个状态。换句话说,每一个状态都是过去历史的一个完整总结。这就是无后向性,又称为无后效性。
********************************************************************************************
动态规划分类有非常多划分方法,网上有非常多是依照状态来分,分为一维、二维、区间、树形等等。我认为还是按功能即解决的问题的类型以及难易程度来分比較好,以下依照我自己的理解和归纳,把动态规划的分类例如以下:
一、简单基础dp
这类dp主要是一些状态比較easy表示,转移方程比較好想,问题比較基本常见的。主要包含递推、背包、LIS(最长递增序列),LCS(最长公共子序列),以下针对这几种类型,推荐一下比較好的学习资料和题目。
1、递推:
递推一般形式比較单一,从前往后,分类枚举即可。
简单:
hdu 2084 数塔 简单从上往下递推
hdu 2018 母牛的故事 简单递推计数
hdu 2044 一仅仅小蜜蜂... 简单递推计数(Fibonacci)
hdu 2041 超级楼梯 Fibonacci
hdu 2050 折线切割平面 找递推公式
推荐:
CF 429B B.Working out 四个角递推
zoj 3747 Attack on Titans 带限制条件的计数递推dp
hdu 4489 The King's Ups and Downs
2、背包
经典的背包九讲:http://love-oriented.com/pack/
推荐博客:http://blog.csdn.net/woshi250hua/article/details/7636866
主要有0-1背包、全然背包、分组背包、多重背包。
简单:
hdu 2955 Robberies 01背包
hdu 1864 最大报销额 01背包
hdu 2844 Coins 多重背包
hdu 2159 FATE 全然背包
推荐:
woj 1537 A Stone-I 转化成背包
woj 1538 B Stone-II 转化成背包
poj 1170 Shopping Offers 状压+背包
zoj 3769 Diablo III 带限制条件的背包
zoj 3638 Fruit Ninja背包的转化成组合数学
hdu 3092 Least common multiple 转化成全然背包问题
poj 1015 Jury Compromise 扩大区间+输出路径
poj 1112 Team Them UP 图论+背包
3、LIS
最长递增子序列,朴素的是o(n^2)算法,二分下能够写成o(nlgn):维护一个当前最优的递增序列——找到恰好大于它更新
简单:
推荐:
uva 10635 Prince and Princess LCS转化成LIS
hdu 4352 XHXJ's LIS 数位dp+LIS思想
srm div2 1000 状态压缩+LIS
poj 1239 Increasing Sequence 两次dp
4、LCS
最长公共子序列,通常o(n^2)的算法
uva 111 History Grading 要先排个序
二、区间dp
推荐博客:http://blog.csdn.net/woshi250hua/article/details/7969225
区间dp,通常是枚举区间,把区间分成左右两部分,然后求出左右区间再合并。
poj 1141 Brackets Sequence 括号匹配并输出方案
hdu 4745 Two Rabbits 转化成求回文串
zoj 3541 The Last Puzzle 贪心+区间dp
三、树形dp
比較好的博客:http://blog.csdn.net/woshi250hua/article/details/7644959
一篇论文:http://doc.baidu.com/view/f3b19d0b79563c1ec5da710e.html
树形dp是建立在树这样的数据结构上的dp,一般状态比較好想,通过dfs维护从根到叶子或从叶子到根的状态转移。
hdu 4123 Bob's Race 二分+树形dp+单调队列
hdu 4514 求树的直径
hdu 4126 Genghis Kehan the Conqueror MST+树形dp 比較经典
hdu 4756 Install Air Conditioning MST+树形dp 同上
hdu 3660 Alice and Bob's Trip 有点像对抗搜索
CF 337D Book of Evil 树直径的思想 思维
四、数位dp
推荐一篇论文:http://wenku.baidu.com/view/d2414ffe04a1b0717fd5dda8.html
数位dp,主要用来解决统计满足某类特殊关系或有某些特点的区间内的数的个数,它是按位来进行计数统计的,能够保存子状态,速度较快。数位dp做多了后,套路基本上都差点儿相同,关键把要保存的状态给抽象出来,保存下来。
hdu 2089 不要62 简单数位dp
CF 401D Roman and Numbers 状压+数位dp
hdu 4398 X mod f(x) 把模数加进状态里面
hdu 4734 F(x) 简单数位dp
hdu 3693 Math teacher's homework 思维变换的数位dp
hdu 4352 XHXJ's LIS 数位dp+LIS思想
CF 55D Beautiful Numbers 比較巧妙的数位dp
CF 258B Little Elephant and Elections 数位dp+组合数学+逆元
五、概率(期望) dp
推荐博客:http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html
推荐博客:http://blog.csdn.net/woshi250hua/article/details/7912049
推荐论文:
一般来说概率正着推,期望逆着推。有环的一般要用到高斯消元解方程。期望能够分解成多个子期望的加权和,权为子期望发生的概率,即 E(aA+bB+...) = aE(A) + bE(B) +...
ural 1776 Anniversiry Firework 比較基础
hdu 4418 Time travel 比較经典BFS+概率dp+高斯消元
hdu 4586 Play the Dice 推公式比較水
jobdu 1546 迷宫问题 高斯消元+概率dp+BFS预处理
hdu 3853 LOOPS 简单概率dp
hdu 4405 Aeroplane chess 简单概率dp,比較直接
hdu 4089 Activation 比較经典
poj 2096 Collecting Bugs 题目比較难读懂
zoj 3640 Help me Escape 从后往前,比較简单
hdu 4034 Maze 经典好题,借助树的概率dp
hdu 4336 Card Collector 状态压缩+概率dp
hdu 4326 Game 这个题状态有点难抽象
六、状态压缩dp
这类问题有TSP、插头dp等。
推荐论文:http://wenku.baidu.com/view/ce445e4f767f5acfa1c7cd51.html
推荐博客:http://blog.csdn.net/sf____/article/details/15026397
推荐博客:http://www.notonlysuccess.com/index.php/plug_dp/
hdu 4568 Hunter 最短路+TSP
hdu 4539 插头dp
poj 2411 Mandriann's Dream 轮廓线dp
七、数据结构优化的dp
有时虽然状态找好了,转移方程的想好了,但时间复杂度比較大,须要用数据结构进行优化。常见的优化有二进制优化、单调队列优化、斜率优化、四边形不等式优化等。
1、二进制优化
主要是优化背包问题,背包九讲里面有介绍,比較简单,这里仅仅附上几道题目。
2、单调队列优化
推荐论文:http://wenku.baidu.com/view/4d23b4d128ea81c758f578ae.html
推荐博客:http://www.cnblogs.com/neverforget/archive/2011/10/13/ll.html
poj 3245 Sequece Partitioning 二分+单调队列优化
3、斜率优化
推荐论文:用单调性优化动态规划
推荐博客:http://www.cnblogs.com/ronaflx/archive/2011/02/05/1949278.html
4、四边形不等式优化
推荐博客:http://www.cnblogs.com/ronaflx/archive/2011/03/30/1999764.html
推荐博客:http://www.cnblogs.com/zxndgv/archive/2011/08/02/2125242.html
【DP专辑】ACM动态规划总结的更多相关文章
- 【DP专辑】ACM动态规划总结(转)
http://blog.csdn.net/cc_again/article/details/25866971 动态规划一直是ACM竞赛中的重点,同时又是难点,因为该算法时间效率高,代码量少,多元性强, ...
- 【转载】ACM总结——dp专辑
感谢博主—— http://blog.csdn.net/cc_again?viewmode=list ---------- Accagain 2014年5月15日 动态规划一 ...
- 【转】【DP_树形DP专辑】【9月9最新更新】【from zeroclock's blog】
树,一种十分优美的数据结构,因为它本身就具有的递归性,所以它和子树见能相互传递很多信息,还因为它作为被限制的图在上面可进行的操作更多,所以各种用于不同地方的树都出现了,二叉树.三叉树.静态搜索树.AV ...
- DP专辑
今天练了一波DP.时间紧迫我就只贴代码了. 20141120 fzu2129 http://acm.fzu.edu.cn/problem.php?pid=2129 不同的子序列个数 //#pragma ...
- 区间Dp 暴力枚举+动态规划 Hdu1081
F - 最大子矩形 Time Limit:1000MS Memory Limit:10000KB 64bit IO Format:%I64d & %I64u Submit Status Des ...
- 概率dp专辑
求概率 uva11021 http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_ ...
- 树形dp专辑
hdu 2196 http://acm.hdu.edu.cn/showproblem.php?pid=2196 input 5//5个结点 1 1//表示结点2到结点1有一条权值为1的边 2 1//表 ...
- ACM - 动态规划 - UVA 1347 Tour
UVA 1347 Tour 题解 题目大意:有 \(n\) 个点,给出点的 \(x\).\(y\) 坐标.找出一条经过所有点一次的回路,从最左边的点出发,严格向右走,到达最右点再严格向左,回到最左点. ...
- ACM - 动态规划 - UVA437 The Tower of Babylon
UVA437 The Tower of Babylon 题解 初始时给了 \(n\) 种长方体方块,每种有无限个,对于每一个方块,我们可以选择一面作为底.然后用这些方块尽可能高地堆叠成一个塔,要求只有 ...
随机推荐
- Yii学习笔记之三(在windows 上安装 advanced )
首先说一下下载地址: http://www.yiiframework.com/download/ 然后将下载下来的文件进行解压到 你指定的文件夹 解压过程中假设报什么错误 直接忽略掉 我的解压文件夹是 ...
- c语言推断数是否是素数
这是推断数是否是素数.网络版非常.我觉得有点问题.今天一个朋友问我这个问题.我知道,今天,我把自己的代码,非常实用哦!. #include<stdio.h> #include<mat ...
- Flash Android ANE打包之基本流程
搭建环境这里就不详细说明了 一.Android本地库编写 1.从Flash Air SDK中提取需要的jar包 Android下需要的jar包在Flash Air SDK/lib/android目录下 ...
- VS调试技巧之附加进程
用过VS一段时间的程序猿们相信都有过这种调试经历:每次按下F5进行断点调试时,都要等待好长时间:先让解决方式编译通过,然后启动VS自带的简版IIS作为server启动,进而开启浏览器,最后进行对应的操 ...
- CSS3影子 box-shadow使用和技巧总结
text-shadow阴影效果添加到文本,box-shadow块元素被添加到周围的阴影. 随着html5和CSS3声望.越来越普遍的使用特效. 基本语法这是{box-shadow:[inset] x- ...
- 基于VLC的视频播放器
原文:基于VLC的视频播放器 最近在研究视频播放的功能,之前是使用VideoView.在网上看了一下,感觉不是很好,支持的格式比较少,现在网络视频的格式各种各样,感觉用VideoView播放起来局限性 ...
- python学习笔记之五:抽象
本文会介绍如何将语句组织成函数,还会详细介绍参数和作用域的概念,以及递归的概念及其在程序中的用途. 一. 创建函数 函数是可以调用,它执行某种行为并且返回一个值.用def语句即可定义一个函数:(并非所 ...
- 初识google多语言通信框架gRPC系列(三)C#中使用gRPC
我的这几篇文章都是使用gRPC的example,不是直接编译example,而是新建一个项目,从添加依赖,编译example代码,执行example.这样做可以为我们创建自己的项目提供借鉴.如果对gR ...
- ubuntu10.10和windows双系统启动顺序的修改
我想大部分童鞋装ubuntu的时候,硬盘上的windows肯定还是保留着的,启动电 脑时可以选择,想进windows就进windows,想进ubuntu就进ubuntu.但装完ubuntu后,它默认启 ...
- iSwifting如何发送照片社区
登录iSwifting社区 1,首先点击"帖子": 2,点击"照片": 3.点击"选择文件上传" 4,上传后的照片: 5,点击上传的照片: ...