DP:0
小故事:
A * "1+1+1+1+1+1+1+1 =?" * A : "上面等式的值是多少"
B : *计算* "8!" A *在上面等式的左边写上 "1+" *
A : "此时等式的值为多少"
B : *quickly* "9!"
A : "你怎么这么快就知道答案了"
A : "只要在8的基础上加1就行了"
A : "所以你不用重新计算因为你记住了第一个等式的值为8!动态规划算法也可以说是 '记住求过的解来节省时间'"
---------------------
特性:
能采用动态规划求解的问题的一般要具有3个性质:
最优化原理:如果问题的最优解所包含的子问题的解也是最优的,就称该问题具有最优子结构,即满足最优化原理。
无后效性:即某阶段状态一旦确定,就不受这个状态以后决策的影响。也就是说,某状态以后的过程不会影响以前的状态,只与当前状态有关。
有重叠子问题:即子问题之间是不独立的,一个子问题在下一阶段决策中可能被多次使用到。(该性质并不是动态规划适用的必要条件,但是如果没有这条性质,动态规划算法同其他算法相比就不具备优势)
解题步骤:
1. 拆分问题
2. 定义状态(并找出初状态)
3. 状态转移方程
DP算法的两种形式:
上面已经知道动态规划算法的核心是记住已经求过的解,记住求解的方式有两种:①自顶向下的备忘录法 ②自底向上。
举一个最简单的例子:求斐波拉契数列Fibonacci 。
Fibonacci (n) = ; n =
Fibonacci (n) = ; n =
Fibonacci (n) = Fibonacci(n-) + Fibonacci(n-)
0.递归版本
public int fib(int n)
{
if(n<=)
return ;
if(n==)
return ;
return fib( n-)+fib(n-);
}
递归树

很多节点(如fib(2))被执行。
1.自顶向下的备忘录法
public static int Fibonacci(int n)
{
if(n<=)
return n;
int []Memo=new int[n+];
for(int i=;i<=n;i++)
Memo[i]=-;
return fib(n, Memo);
}
public static int fib(int n,int []Memo)
{ if(Memo[n]!=-)
return Memo[n];
//如果已经求出了fib(n)的值直接返回,否则将求出的值保存在Memo备忘录中。
if(n<=)
Memo[n]=; else Memo[n]=fib( n-,Memo)+fib(n-,Memo); return Memo[n];
}
理解:创建了一个n+1大小的数组来保存求出的斐波拉契数列中的每一个值,在递归的时候如果发现前面fib(n)的值计算出来了就不再计算,如果未计算出来,则计算出来后保存在Memo数组中,下次在调用fib(n)的时候就不会重新递归了。比如上面的递归树中在计算fib(6)的时候先计算fib(5),调用fib(5)算出了fib(4)后,fib(6)再调用fib(4)就不会在递归fib(4)的子树了,因为fib(4)的值已经保存在Memo[4]中。
2.自底向上
public static int fib(int n)
{
if(n<=)
return n;
int []Memo=new int[n+];
Memo[]=;
Memo[]=;
for(int i=;i<=n;i++)
{
Memo[i]=Memo[i-]+Memo[i-];
}
return Memo[n];
}
自底向上方法也是利用数组保存了先计算的值,为后面的调用服务。观察参与循环的只有 i,i-1 , i-2三项,因此该方法的空间可以进一步的压缩如下。
public static int fib(int n)
{
if(n<=)
return n; int Memo_i_2=;
int Memo_i_1=;
int Memo_i=;
for(int i=;i<=n;i++)
{
Memo_i=Memo_i_2+Memo_i_1;
Memo_i_2=Memo_i_1;
Memo_i_1=Memo_i;
}
return Memo_i;
}
一般来说由于备忘录方式的动态规划方法使用了递归,递归的时候会产生额外的开销,使用自底向上的动态规划方法要比备忘录方法好。
Recursion Practice ★☆☆☆☆ 几个初级递推
Put Apple ★☆☆☆☆
Tri Tiling ★☆☆☆☆ 【例题1】
Computer Transformation ★☆☆☆☆ 【例题2】
Train Problem II ★☆☆☆☆
How Many Trees? ★☆☆☆☆
Buy the Ticket ★☆☆☆☆
Game of Connections ★☆☆☆☆
Count the Trees ★☆☆☆☆
Circle ★☆☆☆☆
Combinations, Once Again ★★☆☆☆
Closing Ceremony of Sunny Cup ★★☆☆☆
Rooted Trees Problem ★★☆☆☆
Water Treatment Plants ★★☆☆☆
One Person ★★☆☆☆
Relax! It’s just a game ★★☆☆☆
N Knight ★★★☆☆
Connected Graph ★★★★★ 楼天城“男人八题”之一
Function Run Fun ★☆☆☆☆ 【例题3】
FatMouse and Cheese ★☆☆☆☆ 经典迷宫问题
Cheapest Palindrome ★★☆☆☆
A Mini Locomotive ★★☆☆☆
Millenium Leapcow ★★☆☆☆
Brackets Sequence ★★★☆☆ 经典记忆化
Chessboard Cutting ★★★☆☆ 《算法艺术和信息学竞赛》例题
Number Cutting Game ★★★☆☆
Constructing Roads In JG Kingdom ★★☆☆☆
Stock Exchange ★★☆☆☆
Wooden Sticks ★★☆☆☆
Bridging signals ★★☆☆☆
BUY LOW, BUY LOWER ★★☆☆☆ 要求需要输出方案数
Longest Ordered Subsequence ★★☆☆☆
Crossed Matchings ★★☆☆☆
Jack's struggle ★★★☆☆ 稍微做点转化
Max Sum ★☆☆☆☆ 最大子段和
Max Sum Plus Plus ★★☆☆☆ 最大M子段和
To The Max ★★☆☆☆ 最大子矩阵
Max Sequence ★★☆☆☆ 最大2子段和
Maximum sum ★★☆☆☆ 最大2子段和
最大连续子序列 ★★☆☆☆ 最大子段和
Largest Rectangle in a Histogram ★★☆☆☆ 最大子矩阵变形
City Game ★★☆☆☆ 最大子矩阵扩展
Matrix Swapping II ★★★☆☆ 最大子矩阵变形后扩展
Skiing ★☆☆☆☆
Super Jumping! Jumping! Jumping! ★☆☆☆☆
Milking Time ★★☆☆☆ 区间问题的线性模型
Computers ★★☆☆☆ 【例题5】
Bridge over a rough river ★★★☆☆ 【例题6】
Crossing River ★★★☆☆ 【例题6】大数据版
Blocks ★★★☆☆
Parallel Expectations ★★★★☆ 线性模型黑书案例
Palindrome ★☆☆☆☆ 【例题7】
See Palindrome Again ★★★☆☆
饭卡 ★☆☆☆☆ 01背包
I NEED A OFFER! ★☆☆☆☆ 概率转化
Bone Collector ★☆☆☆☆ 01背包
最大报销额 ★☆☆☆☆ 01背包
Duty Free Shop ★★☆☆☆ 01背包
Robberies ★★☆☆☆ 【例题8】
Piggy-Bank ★☆☆☆☆ 完全背包
Cash Machine ★☆☆☆☆ 多重背包
Coins ★★☆☆☆ 多重背包,楼天城“男人八题”之一
I love sneakers! ★★★☆☆ 背包变形
ChessboardProblem ★☆☆☆☆ 比较基础的状态压缩
Number of Locks ★☆☆☆☆ 简单状态压缩问题
Islands and Bridges ★★☆☆☆ 【例题9】
Tiling a Grid With Dominoes ★★☆☆☆ 骨牌铺方格 4XN的情况
Mondriaan's Dream ★★☆☆☆ 【例题10】的简易版
Renovation Problem ★★☆☆☆ 简单摆放问题
The Number of set ★★☆☆☆
Hardwood floor ★★★☆☆ 【例题10】二进制状态压缩鼻祖
Tetris Comes Back ★★★☆☆ 纸老虎题
Bugs Integrated, Inc. ★★★☆☆ 三进制状态压缩鼻祖
Another Chocolate Maniac ★★★☆☆ 三进制
Emplacement ★★★☆☆ 类似Bugs那题,三进制
Toy bricks ★★★☆☆ 四进制, 左移运算高于&
Quad Tiling ★★★☆☆ 骨牌铺方格 4XN的情况 利用矩阵优化
Eat the Trees ★★★☆☆ 插头DP入门题
Formula 1 ★★★☆☆ 插头DP入门题
The Hive II ★★★☆☆ 插头DP
Plan ★★★☆☆ 插头DP
Manhattan Wiring ★★★☆☆ 插头DP
Pandora adventure ★★★★☆ 插头DP
Tony's Tour ★★★★☆ 插头DP,楼天城“男人八题”之一
Pipes ★★★★☆ 插头DP
circuits ★★★★☆ 插头DP
Beautiful Meadow ★★★★☆ 插头DP
I-country ★★★★☆ 高维状态表示
Permutaion ★★★★☆ 牛逼的状态表示
01-K Code ★★★★☆
Tour in the Castle ★★★★★ 插头DP(难)
The Floor Bricks ★★★★★ 四进制(需要优化)
Anniversary party ★☆☆☆☆ 树形DP入门
Strategic game ★☆☆☆☆ 树形DP入门
Computer ★★☆☆☆
Long Live the Queen ★★☆☆☆
最优连通子集 ★★☆☆☆
Computer Network ★★☆☆☆
Rebuilding Roads ★★★☆☆ 树形DP+背包
New Year Bonus Grant ★★★☆☆
How Many Paths Are There ★★★☆☆
Intermediate Rounds for Multicast ★★★★☆
Fire ★★★★☆
Walking Race ★★★★☆
Tree ★★★★★ 树形DP,楼天城“男人八题”之一
Palindrome ★☆☆☆☆
Telephone Wire ★☆☆☆☆
Gangsters ★☆☆☆☆
Dominoes ★☆☆☆☆
Cow Exhibition ★☆☆☆☆
Supermarket ★★☆☆☆
Print Article ★★★☆☆
Lawrence ★★★☆☆
Batch Scheduling ★★★☆☆
K-Anonymous Sequence ★★★☆☆
Cut the Sequence ★★★☆☆
Divisibility ★★☆☆☆ 利用同余性质
Magic Multiplying Machine ★★☆☆☆ 利用同余性质
Moving Computer ★★☆☆☆ 散列HASH表示状态
Post Office ★★★☆☆ 四边形不等式
Minimizing maximizer ★★★☆☆ 线段树优化
Man Down ★★★☆☆ 线段树优化
So you want to be a 2n-aire? ★★★☆☆ 期望问题
Expected Allowance ★★★☆☆ 期望问题
Greatest Common Increase Subseq ★★★☆☆ 二维线段树优化
Traversal ★★★☆☆ 树状数组优化
Find the nondecreasing subsequences ★★★☆☆ 树状数组优化
Not Too Convex Hull ★★★★☆ 利用凸包进行状态转移
In Action ★★★☆☆ 最短路+背包
Search of Concatenated Strings ★★★☆☆ STL bitset 应用
Common Subsequence 2D/0D
Advanced Fruits 2D/0D
Travel 2D/1D
RIPOFF 2D/1D
Balls 2D/1D
Projects 2D/1D
Cow Roller Coaster 2D/1D
LITTLE SHOP OF FLOWERS 2D/1D
Pearls 2D/1D
Spiderman 2D/0D
The Triangle 2D/0D
Triangles 2D/0D
Magazine Delivery 3D/0D
Tourist 3D/0D
Rectangle 2D/1D
Message 2D/1D
Bigger is Better 2D/1D
Girl Friend II 2D/1D
Phalanx 2D/1D
Spiderman 最坏复杂度O(NK),K最大为1000000,呵呵
Find a path 3D/1D 公式简化,N维不能解决的问题试着用N+1维来求解
DP:0的更多相关文章
- 动态规划 计数型DP:dobra
令人愉快的单词(dobra)时间限制: 0.1 秒空间限制: 32 MB [问题描述]Lea 在她的一生中碰到过很多单词.其中的很大一部分都使她不愉快.作为补偿,她开始创造一些愉快的单词. Lea 通 ...
- poj2533--Longest Ordered Subsequence(dp:最长上升子序列)
Longest Ordered Subsequence Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 33943 Acc ...
- dp:FZU2030括号问题
http://acm.fzu.edu.cn/problem.php?pid=2030 给出一个字符串,其中包括3种字符: ‘(‘, ‘)’, ‘?’.其中?表示这个字符可以是’(‘也可以是’)’. 现 ...
- sdutoj1225--编辑距离(dp:字符串转换)
编辑距离 nid=24#time" style="padding-bottom:0px; margin:0px; padding-left:0px; padding-right:0 ...
- 在ie浏览器,360浏览器下,margin:0 auto;不居中的原因
转自 http://blog.sina.com.cn/s/blog_6eef6bf60100nn4m.html margin:0 auto:不居中可能有以下两个的原因 没有设置宽度 看看上面的代码,根 ...
- DP:树DP
The more, The Better Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...
- 使用font-size:0去掉inline-block元素之间的空隙
现代浏览器的最新版都支持inline-block,只有该死的ie6.7不支持inline-block,但ie6.7可以通过 display:inline: zoom:1: 来模拟 下面是inline- ...
- layui,返回的数据不符合规范,正确的成功状态码 (code) 应为:0
在使用layui的数据表格绑定数据的时候,出现的一些问题, "返回的数据不符合规范,正确的成功状态码 (code) 应为:0" 之后在网上也查找的了许多的资料,也去看了官网的文档 ...
- 无法安装Java,以下开关中存在错误:“0”
无法安装Java,以下开关中存在错误:“0”:. 解决方法:以管理员运行
随机推荐
- yum update 自动忽略内核更新
系统每天凌晨 3 点自动执行 yum update 任务 但升级内核后,会出现下面情况 一些编译软件需要内核模块才能够被调用, 而内核模块需要与当前版本内核编译后才能够使用, 假设内核升级后,之前软件 ...
- python3获得命令行输入的参数
外部直接执行python文件时,我们有时需要获得命令行的参数 获得命令行参数的两种方式 1.通过sys.argv sys.argv:获得一个参数列表,第一个值为文件名本身,通过sys.argv ...
- sqlserver自增主键
参考 https://www.cnblogs.com/michellexiaoqi/p/8031294.html 1.选中表: 2.右击鼠标,设计: 3.选中列(整数类 ...
- 完整性约束&外键变种三种关系&数据的增删改
完整性约束 本节重点: not null 与 default unique primary auto_increment foreign key 一.介绍 约束条件与数据类型的宽度一样,都是可选参数 ...
- Flask总结
Flask的优缺点 优点:Flask小而精,三方组件全 缺点:稳定性相对较差,三方组件版本问题,Flask一旦迭代,就可能造成三方组件不兼容的问题. flask三剑客 + 小儿子 Django ...
- 什么是PCM?它和.wav文件是什么关系?
PCM(Pulse Code Modulation----脉码调制录音).所谓PCM录音就是将声音等模拟信号变成符号化的脉冲列,再予以记录.PCM信号是由[1].[0]等符号构成的数字信号,而未经过任 ...
- Unity3D研究院之设置自动旋转屏幕默认旋转方向
如下图所示,在处理屏幕默认旋转方向的时候可以在这里进行选择,上下左右一共是4个方向. 策划的需求是游戏采用横屏,但是要求支持两个方向自动旋转,如下图所示,我的设置是这样的. Default Orien ...
- stm32阅读代码工具source insight
不知道学stm32有没有这样的烦恼,想看一个项目的代码,但是用keil又发现建立工程太麻烦,单个打开文件又找不到函数和变量之间的依赖关系,变量和函数又不能高亮显示,linux下vim和emacs虽然很 ...
- 多线程通信(wait和notify)
线程通信概念: 线程是操作系统中独立的个体,但这些个体如果不经过特殊的处理就不能成为一个整体,线程间的通信就成为整体的必用方式之一.当线程存在通信指挥,系统间的交互性会更强大,在提高CPU利用率的同时 ...
- React学习札记一
I’m in a hurry! 我在赶时间! It’s her field. 这是她的本行. It’s up to you. 由你决定. You owe me one.你欠我一个人情. 1.React ...