1、1. 按状态类型分 写在前面: 从状态类型分,并不表示一题只从属于一类。其实一类只是一种状态的表示方法。可以好几种方法组合成一个状态,来解决问题。 1.1. 编号(长度)动态规划 共性总结 本类的状态是基础的基础,大部分的动态规划都要用到它,成为一个维。 一般来说,有两种编号的状态: 状态(i)表示前i个元素决策组成的一个状态。 状态(i)表示用到了第i个元素,和其他在1到i-1间的元素,决策组成有的一个状态。 题库 a) 最长不下降子序列 以一元组(i)作为状态,表示第i个作为序列的最后一个点的时候的最长序列。于是很容易想到O(n2)得算法。但本题可合理组织状态,引入一个单调的辅助数组,利用
2、单调性二分查找,优化到O(nlogn)。关于优化详见优化章。 一些问题可将数据有序化,转化成本题。 应用: 拦截导弹(NOIP99 Advance 1) 是 题。 Beautiful People (sgu199),要将数据有序化:其 一个 作为第一关 不下降 列, 一个 作为第二关 不 。 Segment (ural 1078),将 的 点有序化 可以了。 b) LCS 状态(i,j),表示第1个 的第i , 第2个 的第j ,得到的最长的 。 有 个 要LCS, 维, 几个 几个维。 将 题 入 问题。 c) (IOI99) 见 问题。 1.2. 间动态规划 共性总结 本类问题 下一章的划
3、分问题的决策的分点序currency1“大(本类问题的30%)。 题库 a) 子合并 见划分问题 b) fifl (CEOI01,Patten) 题的方是状态的是一个合 不是一个数。 c) 不可分解的编(ACM World Final 2002) d) Electric Path(ural1143) e) (IOI2000 Day2 1) 状态表示的 从第i个”可以从属于个,最优子结。转 一个方:第k个可以 一个间的”i,j。于是方 了: f(k,i,j)=minf(k-1,p,i-1)+w(i,j)(k-1=p=i-1) S(i) 为”i到 点的。 w(i,j)=mink| Sum|S(k)
4、-S(p)|(i=p=j)(i=k=j) 找到i,j间最好的一个点。 不 可以Sum|S(k)-S(p)|是单调的, 以 数 可以了。 k的只有floor(i+j)/2), ceil(i+j)/2)两个。Floor是下 。Ceil是 。 转 时间降到O(1)。 到是间 的, (p,i-1) 和(i, j) 的 i-1, i是 的, 以 间可以降维:f(i,j)表示 前i个到前j个”的最优。 f(i,j)=minf(i-1,p-1)+w(p,j)(i-1=p=j-1 e(i,j) 为 f(i,j)到 最优时的p. 不 ,得到e(i,j)=e(i,j+1)=e(i+1,j+1) 决策数 了一个数
5、。 1.3. 动态规划 共性总结 后的一些问题,状态是 维 其他的维组成。本类 划分问题(是2维 维的 的划分) 问题的currency1本类问题 大 数。 题库 a) 分(NOI99 4) 要是将 , 后的 很容易 方。 状态是 2个组成的4元组(x1,y1)(x2,y2),表示一个子 。 有点前的间动态规划,只不是将1维转2维。 后见 问题。 1.4. 数 动态规划 共性总结 题库 a) 01 应用: 问题(NOIP01 Trade 4) 是 题。 分 可利用方的性 , 间降1维。 可 的分(pku1742, Problem F LouTianChengs Contest in POJ)
6、2008-11-5 02:00 RAMBOO 4 粉丝 2楼使用 右法在定 速。 给状态 一个属性last,记录 一 剩下的可用的同硬数(利用了 前转 是唯一前驱的点)。 b) 火柴问题(sgu153 Playing with matches) c) Stone Pile(ural1005 Stone Pile) d) 巡逻(CTSC2000) 1.5. 5.树型动态规划 共性总结 1) 动态规划的顺序 一般按照后序遍历的顺序, 处理完儿子再处理 前节点,才 合树的子结的性 。 2) 叉树转换为二叉树 于要分 附 维到各个节点, 分 附 维是个划分问题, 还是按 前节点到各个儿子节点分 , 成
7、了一个 数划分问题,O(n-2)。 以要把 叉树转换为二叉树, 才能按动态规划的方只决策 前点的分问题, O(n-)。 3) 前点的选 不选的常数维 维解决的是后效性问题。 4) 在将 信息转成树时的技巧 将读入的 分裂成2条 ,将 2条 关联起来( 是找到一条 , 一条 的编号 知道)。用前星表示法表示 (按起点有序),以后用 的时候,用了一条 打不可用志, 将关联 打不可用志。 可以保 O(n)的时间完成信息处理, 且在父节点找儿子的 带来很大的方便。 5) 杂度 树型动态规划 杂度基本 是O(n); 有附 维m, 是O(nm)。 题库 a) 选课(CTSC97-3) 于要分 课数, 以要
8、 叉树转换为二叉树。 b) 贪吃的九头龙(NOI02-3) 小头数大于1的话, 让不同的小头吃一 树枝的2个 点。 把问题转化成:附 维是大头吃的个数, 前点 不 大头吃的常数维的动态规划。 于涉及划分问题, 以要 叉树转换为二叉树。 c) 求树的 心(sgu134 Centroid) 给 一棵 不带 的树,求点,使得去掉 点后,剩下的最大的 子图的顶点数最小. d) 求树 的点最远最近。 给 一棵 带 的树,求树 的点,使得 点到树 的其他结点的最远最近。 Computer Network (sgu149) Computer Net (ural1056) 1.6. 合动态规划(状态压缩) 共
9、性总结 1) 数据性 给 的数据在某一个 几个维度 一般具有“小的(可以枚举一类的状态)。 一个枚举的状态是一个合。 2) 编 于合 元素个数的不定性 大,直接开数组存,不好索引数组(编 杂度太高), 以要将合编。 利用数据的可枚举性,将枚举的状态(合)编。一般来说的要很小(尽 除用的,如炮兵: 前格和 格存在炮兵的情况是非法的,可以 除)。 规定编的代表的 ,要尽 规定好维护的。(如炮兵: 前格存在炮兵的用2, 格存在炮兵用1。 下一层的规划时,只要-1 可)。 有时候可以直接利用编的顺序动态规划,因为 时编已经是拓补有序。如TSP问题 前已选点合的状态的前驱的编的一定“ 前的编的小。 3)
10、 状态压缩 对有限阶 的 情况,行走情况编(其实 是 的合 行走 的合), 的编, 有人谓: 状态压缩。 类题以 炮兵阵为典型,进行扩展。 题库 a) 购物(IOI95-2) 可将 种物 按5进编。(5为 种物 数的 限) 于物 数的 限为5,“小, 可直接开数组存。 b) Roger 一(CTSC98 Day2 4) 一个 方 在一个方格 的状态只有24种, 且可以 顶面和前面来表示, 用3维的状态(x,y,p) 可以解决,p为1到24种状态 的一种。 c) TSP问题 一下TSP的 索 : for (x in 选点) TSP(x) 2008-11-5 02:00 RAMBOO 4 粉丝 3
11、楼前 的最后一个节点为x,在要选 下一个节点y, y要在 选点的合 。 选点 已选点的合已 定, 后效性 除。可以DP。状态为 X为 前 的已选点的合( i), 前 的最后一个节点为i。2元组(X,i)为经 已选点的合X到节点i的最 长度。将X编 可。 :并 有因为动态规划将问题从NP类带到P类。 应用: DNA Laboratory(Problem B,TU-Darmstadt Programming Contest 2004) 将 个 的currency1 部分求 , 可以将问题 成TSP 但要 典序最小的, 要 DP顺序。 有具 的 。 d) 炮兵阵 分经典,详见 。 应用: Anoth
12、er Chocolate Maniac(sgu132) 类 炮兵的 法的最,只不 是求最小, 点。 Hardwood floor(sgu131) 类 炮兵的 法的 Little Knights(sgu225) 类 炮兵的 法的 ,数据 太大要const Little Kings(sgu223) 类 炮兵的 法的 Bugs (CEOI 2002) 类 炮兵的 法的最 1.7. 利用动态规划想求最,编号( )的 代 共性总结 要利用 的一些算 剩下的 作 前的 ,要在于找 一种决策顺序,使成。 题库 a) currency1 b) Communication System 将数据有序化, 从大到小
13、枚举带“, 可利用 处理的结Min, 来决策 前状态。作 代, 是一种动态规划。 (zju1409, Problem C Tehran 2002 Iran Nationwide Internet Programming Contest) 1.8. 记化 索 题库 a) Magic Trick (Problem G, TU-Darmstadt Programming Contest 2004) 2. 按转 方分 2.1. 存在性 fifl 1)01 (CTSC99 1) 2) 数 circle(sgu130) 3) 2.2. 求一 列的分(合并)点(划分问题) 2.2.1. 决策的分点有序 共性
14、总结 a) 有序性 决策的点的编号是有序的, 要按决策的顺序 分点的编号的话,编号是有序的,分点的编号按 序 列。 b) 方一般 f(n,m)=optimizef(k,m-1)+w(k+1,n) (n,m)表示从1到n个点 划分为m个部分的最优;k为决策的分点, 第m个部分为k+1到n; optimize可以为max,min。 题库 a) 数划分 常应用在将一个 分 给一定的小分,如:将大的子分成一定的小,小可为 ,大要分完。有时应用在树型动态规划(二叉转 叉) 。 b) ”最大(NOIP00 Advance 2) 是按 面的一般的方 。 2.2.2. 决策的分点序 共性总结 a) 序性 决策
15、的点的编号是序的, 要按决策的fi 顺序 分点的编号的话,编号是序的。 b) 方一般 f(i,j)=optimizef(i,k-1)+f(k+1,j)+w(i,j) (i,j)表示从i到j的 选一个分点k的最优,子问题是分点 (i,k-1)和右 (k+1,j)的点的的最优; optimize可以为max,min。 方很类 2叉树的性 。 c) 不 类的问题,有些可用 不 优化。见优化章。 题库 a) 子合并(NOI95 2) 经典,详见 。 可用 不 优化成O(n2) 其实还可以用类 的数据结在O(nlogn)的时间 完成,但 不是动态规划了。 应用: 最优二叉 序树(CTSC96 2) b)
16、 (IOI98) 题的 号处理要 ,法算, 于 号的 入,使 本的 的最优解,一下 成的。 c) 分二叉树(NOIP03 Advance 3) 方 是一般,转 的数:w(i,j)=sum(i,k-1)*sum(k+1,j)+d(k)。 于w(i,j)不 单调性,以不能用 不 优化。 d) 号序列(Problem B, NEERC 2001) 题的分点不是一个元素, 是元素间的一条 。 要的维方是从fi 定 。 2.3. 问题 共性总结 a) 行走方决定阶 性 有规定点 点。 行走方都有一定的规定,使 点到点的 有 成有图。 b) 时,应 维,使得 个,都有一个 的状态 对应。如有n个的格类问题
17、,常常转态是(x1,y1)(x2,y2)(xn,yn)。但是太 的话, 间 不,可以降问题转成 问题。 c) 动态规划 于有规定点 点,可以动态规划,但要 效好不好,理 是“ 来 1/2,但有时 于可用于决策的状态 ,效 不了。 d) 决策性 是 谓走法, 对于一个状态,它的前驱 后 数很 (从有图 度, 是入度 度 ),决策。 e) 状态性 是很 状态是 有用的,如 列的LCS,状态为2维的(x,y),但对于一个x只有一个y是有效个。 以实状态数还是 的。 本类一些技巧性的 ,在题库 具 说 。 题库 a) 方格数(NOIP00 advance 4) (x1,y1)(x2,y2) 对 间优化 b) (IOI99) 对本题有个小 : 序,如 ,有序 :对于 i j, i对应的 编号j对应的 编号。 是一个NP问题了,可用后面的基于状态压缩的动态规划解决。 3. 动态规划的优化 3.1. 代 3.2. 3.3. 性的优化