文章分类 - DP类总结
摘要:树形DP 树状动态规划定义 之所以这样命名树规,是因为树形DP的这一特殊性:没有环,dfs是不会重复,而且具有明显而又有严格的层数关系。利用这一特性,我们可以很清晰地根据题目写出一个在树(型结构)上的记忆化搜索的程序。而深搜的特点,就是“不撞南墙不回头” --PPT 一.小胖守皇宫 代码如下: #i
阅读全文
摘要:坐标DP 题如其名,该类型的DP以坐标的形式出现,也是以坐标为元素进行深搜。 该类型的DP问题还是比较简单的。 一.传纸条 这道题找的是从a[0][0]到a[m][n]的两条不相交的路径,并让这两条路径上的点的值和最大。f[i][j][k][l]表示第一条路走到a[i][j],第二条路走到a[k][
阅读全文
摘要:区间DP 一.石子合并1 题目描述: 有N堆石子排成一排(n<=100),现要将石子有次序地合并成一堆,规定每次只能选相邻的两堆合并成一堆,并将新的一堆的石子数,记为改次合并的得分,编一程序,由文件读入堆数n及每堆石子数(<=200); (1)选择一种合并石子的方案,使得做n-1次合并,得分的总和最
阅读全文
摘要:线性DP 线性DP要解决的问题多和最长上升子序列有关,而题目给出的数据多未排序,很难观察出要求的答案。题目中每个元素多有两个变量,可以尝试着将其中一个变量按照升序或者降序排好序,这样往往方便观察,容易找到思路。 一.最长上升子序列 #include<bits/stdc++.h> using name
阅读全文
摘要:背包DP 背包DP,正如其名,一般有它的体积(容量m),物品的价值、个数、体积。但大多数的背包问题都比较抽象或者很复杂,因而找出题中的物品及其属性、背包的容积往往是破题的关键。 1. 01背包 该类型状态比较简单,一种物品只有拿或不拿两种状态,令f[i][j]表示在前i个物品中拿,剩余容量为j所能得
阅读全文