动态规划题库
一、简单基础dp
这类dp主要是一些状态比较容易表示,转移方程比较好想,问题比较基本常见的。主要包括递推、背包、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
uva 10328 Coin Toss 同上题
hdu 4747 Mex
hdu 4489 The King's Ups and Downs
hdu 4054 Number String
2、背包
经典的背包九讲:http://love-oriented.com/pack/
推荐博客:http://blog.csdn.net/woshi250hua/article/details/7636866
主要有0-1背包、完全背包、分组背包、多重背包。
简单:
hdu 2955 Robberies 01背包
hdu 1864 最大报销额 01背包
hdu 2602 Bone Collector 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 扩大区间+输出路径
3、LIS
最长递增子序列,朴素的是o(n^2)算法,二分下可以写成o(nlgn):维护一个当前最优的递增序列——找到恰好大于它更新
简单:
hdu 1003 Max Sum
hdu 1087 Super Jumping!
推荐:
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)的算法
hdu 1503 Advanced Fruits
hdu 1159 Common Subsequence
uva 111 History Grading 要先排个序
poj 1080 Human Gene Functions
二、区间dp
推荐博客:http://blog.csdn.net/woshi250hua/article/details/7969225
区间dp,一般是枚举区间,把区间分成左右两部分,然后求出左右区间再合并。
poj 1141 Brackets Sequence 括号匹配并输出方案
hdu 4745 Two Rabbits 转化成求回文串
zoj 3541 The Last Puzzle 贪心+区间dp
poj 2955 Brackets
hdu 4283 You Are the One 常见写法
hdu 2476 String Printer
zoj 3537 Cake
CF 149D Coloring Brackets
zoj 3469 Food Delivery
三、树形dp
比较好的博客:http://blog.csdn.net/woshi250hua/article/details/7644959
一篇论文:http://doc.baidu.com/view/f3b19d0b79563c1ec5da710e.html
树形dp是建立在树这种数据结构上的dp,一般状态比较好想,通过dfs维护从根到叶子或从叶子到根的状态转移。
hdu 4514 求树的直径
poj 1655 Balancing Act
hdu 4714 Tree2Cycle 思维
hdu 4616 Game
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 树直径的思想 思维
hdu 2196 Computer 搜两遍
四、数位dp
推荐一篇论文:http://wenku.baidu.com/view/d2414ffe04a1b0717fd5dda8.html
数位dp,主要用来解决统计满足某类特殊关系或有某些特点的区间内的数的个数,它是按位来进行计数统计的,可以保存子状态,速度较快。数位dp做多了后,套路基本上都差不多,关键把要保存的状态给抽象出来,保存下来。
hdu 2089 不要62 简单数位dp
hdu 3709 Balanced Number 比较简单
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
hdu 3565 Bi-peak Numbers 比较难想
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 推公式比较水
hdu 4487 Maximum Random Walk
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
六、状态压缩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
hdu 4529 状压dp
poj 1185 炮兵阵地
hdu 3811 Permutation
poj 2411 Mandriann's Dream
poj 1038
poj 2441
hdu 2167
hdu 4026
hdu 4281
七、数据结构优化的dp
有时尽管状态找好了,转移方程的想好了,但时间复杂度比较大,需要用数据结构进行优化。常见的优化有二进制优化、单调队列优化、斜率优化、四边形不等式优化等。
1、二进制优化
主要是优化背包问题,背包九讲里面有介绍,比较简单,这里只附上几道题目。
hdu 1059 Diving
hdu 1171 Big Event in Hdu
poj 1048 Follow My Magic
2、单调队列优化
推荐论文:http://wenku.baidu.com/view/4d23b4d128ea81c758f578ae.html
推荐博客:http://www.cnblogs.com/neverforget/archive/2011/10/13/ll.html
hdu 3401 Trade
poj 3245 Sequece Partitioning 二分+单调队列优化
3、斜率优化
推荐论文:用单调性优化动态规划
推荐博客:http://www.cnblogs.com/ronaflx/archive/2011/02/05/1949278.html
hdu 3507 Print Article
poj 1260 Pearls
hdu 2829 Lawrence
hdu 2993 Max Average Problem
4、四边形不等式优化
推荐博客:http://www.cnblogs.com/ronaflx/archive/2011/03/30/1999764.html
推荐博客:http://www.cnblogs.com/zxndgv/archive/2011/08/02/2125242.html
hdu 2952 Counting Sheep
poj 1160 Post Office
hdu 3480 Division
hdu 3516 Tree Construction
hdu 2829 Lawrence
五、动态规划题集整理
1、递推
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 ★★★★★ 楼天城“男人八题”之一
2、记忆化搜索
Function Run Fun ★☆☆☆☆ 【例题3】
FatMouse and Cheese ★☆☆☆☆ 经典迷宫问题
Cheapest Palindrome ★★☆☆☆
A Mini Locomotive ★★☆☆☆
Millenium Leapcow ★★☆☆☆
Brackets Sequence ★★★☆☆ 经典记忆化
Chessboard Cutting ★★★☆☆ 《算法艺术和信息学竞赛》例题
Number Cutting Game ★★★☆☆
3、最长单调子序列
Constructing Roads In JG Kingdom ★★☆☆☆
Stock Exchange ★★☆☆☆
Wooden Sticks ★★☆☆☆
Bridging signals ★★☆☆☆
BUY LOW, BUY LOWER ★★☆☆☆ 要求需要输出方案数
Longest Ordered Subsequence ★★☆☆☆
Crossed Matchings ★★☆☆☆
Jack's struggle ★★★☆☆ 稍微做点转化
4、最大M子段和
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 ★★★☆☆ 最大子矩阵变形后扩展
5、线性模型
Skiing ★☆☆☆☆
Super Jumping! Jumping! Jumping! ★☆☆☆☆
Milking Time ★★☆☆☆ 区间问题的线性模型
Computers ★★☆☆☆ 【例题5】
Bridge over a rough river ★★★☆☆ 【例题6】
Crossing River ★★★☆☆ 【例题6】大数据版
Blocks ★★★☆☆
Parallel Expectations ★★★★☆ 线性模型黑书案例
6、区间模型
Palindrome ★☆☆☆☆ 【例题7】
See Palindrome Again ★★★☆☆
7、背包模型
饭卡 ★☆☆☆☆ 01背包
I NEED A OFFER! ★☆☆☆☆ 概率转化
Bone Collector ★☆☆☆☆ 01背包
最大报销额 ★☆☆☆☆ 01背包
Duty Free Shop ★★☆☆☆ 01背包
Robberies ★★☆☆☆ 【例题8】
Piggy-Bank ★☆☆☆☆ 完全背包
Cash Machine ★☆☆☆☆ 多重背包
Coins ★★☆☆☆ 多重背包,楼天城“男人八题”之一
I love sneakers! ★★★☆☆ 背包变形
8、状态压缩模型
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 ★★★★★ 四进制(需要优化)
9、树状模型
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,楼天城“男人八题”之一
10、滚动数组优化常见问题
Palindrome ★☆☆☆☆
Telephone Wire ★☆☆☆☆
Gangsters ★☆☆☆☆
Dominoes ★☆☆☆☆
Cow Exhibition ★☆☆☆☆
Supermarket ★★☆☆☆
11、决策单调性
Print Article ★★★☆☆
Lawrence ★★★☆☆
Batch Scheduling ★★★☆☆
K-Anonymous Sequence ★★★☆☆
Cut the Sequence ★★★☆☆
12、常用优化
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 应用
13、其他类型的动态规划
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维来求解