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”:. 解决方法:以管理员运行
随机推荐
- 2.3、CDH 搭建Hadoop在安装(安装Cloudera Manager Server)
第3步:安装Cloudera Manager Server 在此步骤中,您将在Cloudera Manager主机上安装JDK和Cloudera Manager Server软件包. 安装Cloude ...
- prompt
[prompt] prompt() 方法用于显示可提示用户进行输入的对话框. prompt(text,defaultText) 参数 描述 text 可选.要在对话框中显示的纯文本(而不是 HTML ...
- Centos7 安装mysql5.7.24
从mysql官网下载 mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 拷贝到Centos的/opt目录下 1. 解压缩 tar -xzvf mysql-5.7.2 ...
- sublime text3的注册码以及常用方法
Michael BarnesSingle User LicenseEA7E-8213858A353C41 872A0D5C DF9B2950 AFF6F667C458EA6D 8EA3C286 98D ...
- oracle数据库连接不上
Oracle数据库1521端口telnet不通 现象:服务器的ip地址可以ping通,但是安装oracle过程中的指定的“1521”端口telnet不通过 解决办法:1.确保防火墙对1521端口开启: ...
- 十 suprocess模块
1 import subprocess 2 3 ''' 4 sh-3.2# ls /Users/egon/Desktop |grep txt$ 5 mysql.txt 6 tt.txt 7 事物.tx ...
- cdh5.13.1 hadoop hdfs HA模式无法启动
经过观察日志发现,JN三个节点启动正常,只有NN节点启动时提示JN节点没有格式化 停止HDFS下面所有服务 先启动JN节点 然后启动一个NN节点,观察三个JN节点日志 发现其中一个节点的日志正常,没有 ...
- 弹出序列(python)
题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- 第三章 列表(e)插入排序
- 数位dp poj1850
题目链接:https://vjudge.net/problem/POJ-1850 这题我用的是数位dp,刚刚看了一下别人用排列组合,我脑子不行,想不出来. 在这题里面我把a看成1,其他的依次递增,如果 ...