算法201008-动态规划1
动态规划算法难点详解及应用技巧介绍

动态规划算法难点详解及应用技巧介绍动态规划算法(Dynamic Programming)是一种常用的算法思想,主要用于解决具有重叠子问题和最优子结构性质的问题。
在解决一些复杂的问题时,动态规划算法可以将问题分解成若干个子问题,并通过求解子问题的最优解来求解原始问题的最优解。
本文将详细介绍动态规划算法的难点以及应用技巧。
一、动态规划算法的难点1. 难点一:状态的定义在动态规划算法中,首先需要明确问题的状态。
状态是指问题在某一阶段的具体表现形式。
在进行状态定义时,需要考虑到问题的最优子结构性质。
状态的定义直接影响到问题的子问题划分和状态转移方程的建立。
2. 难点二:状态转移方程的建立动态规划算法是基于状态转移的思想,即通过求解子问题的最优解来求解原始问题的最优解。
因此,建立合理的状态转移方程是动态规划算法的关键。
在进行状态转移方程的建立时,需要考虑问题的最优子结构性质和状态之间的关系。
3. 难点三:边界条件的处理在动态规划算法中,边界条件是指问题的最简单情况,用于终止递归过程并给出递归基。
边界条件的处理需要考虑问题的具体要求和实际情况,确保问题能够得到正确的解。
二、动态规划算法的应用技巧1. 应用技巧一:最长递增子序列最长递增子序列是一类经典的动态规划问题。
其求解思路是通过定义状态和建立状态转移方程,找到问题的最优解。
在应用最长递增子序列问题时,可以使用一维数组来存储状态和记录中间结果,通过迭代计算来求解最优解。
2. 应用技巧二:背包问题背包问题是另一类常见的动态规划问题。
其求解思路是通过定义状态和建立状态转移方程,将问题转化为子问题的最优解。
在应用背包问题时,可以使用二维数组来存储状态和记录中间结果,通过迭代计算来求解最优解。
3. 应用技巧三:最短路径问题最短路径问题是动态规划算法的经典应用之一。
其求解思路是通过定义状态和建立状态转移方程,利用动态规划的思想来求解最优解。
在应用最短路径问题时,可以使用二维数组来存储状态和记录中间结果,通过迭代计算来求解最优解。
什么是动态规划算法,常见的动态规划问题分析与求解

什么是动态规划算法,常见的动态规划问题分析与求解理解动态规划动态规划中递推式的求解⽅法不是动态规划的本质。
我曾经给学校参加NOIP的同学多次讲过动态规划,我试着讲⼀下我理解的动态规划,争取深⼊浅出。
希望你看了我的答案,能够喜欢上动态规划。
0. 动态规划的本质,是对问题状态的定义和状态转移⽅程的定义。
引⾃维基百科dynamic programming is a method for solving a complex problem by breaking it down into a collection of simpler subproblems.动态规划是通过拆分问题,定义问题状态和状态之间的关系,使得问题能够以递推(或者说分治)的⽅式去解决。
本题下的其他答案,⼤多都是在说递推的求解⽅法,但如何拆分问题,才是动态规划的核⼼。
⽽拆分问题,靠的就是状态的定义和状态转移⽅程的定义。
1. 什么是状态的定义?⾸先想说⼤家千万不要被下⾯的数学式吓到,这⾥只涉及到了函数相关的知识。
我们先来看⼀个动态规划的教学必备题:给定⼀个数列,长度为N,求这个数列的最长上升(递增)⼦数列(LIS)的长度.以 1 7 2 8 3 4 为例。
这个数列的最长递增⼦数列是 1 2 3 4,长度为4;次长的长度为3,包括 1 7 8; 1 2 3 等.要解决这个问题,我们⾸先要定义这个问题和这个问题的⼦问题。
有⼈可能会问了,题⽬都已经在这了,我们还需定义这个问题吗?需要,原因就是这个问题在字⾯上看,找不出⼦问题,⽽没有⼦问题,这个题⽬就没办法解决。
所以我们来重新定义这个问题:给定⼀个数列,长度为N,设为:以数列中第k项结尾的最长递增⼦序列的长度.求中的最⼤值.显然,这个新问题与原问题等价。
⽽对于来讲,都是的⼦问题:因为以第k项结尾的最长递增⼦序列(下称LIS),包含着以第中某项结尾的LIS。
上述的新问题也可以叫做状态,定义中的“为数列中第k项结尾的LIS的长度”,就叫做对状态的定义。
动态规划算法入门

动态规划算法⼊门1. 动态规划算法定义:动态规划,英⽂描述为Dynamic programming. 是⼀种可以把原始问题分解为若⼲相关联的⼦解问题,并通过求取和保存⼦问题的解,获得原问题的解。
动态规划算法可以解决的问题通常包含如下特征:重叠⼦问题最优⼦结构 对于第⼀个特征,⽐较容易理解,即分解的若⼲⼦问题,包含着重复的解。
举例如:斐波那契数列,F(n) = F(n-1) + F(n-2),求解的F(n-1)的过程中,包含着求解F(n-2)的结果。
对于第⼆个特征,参考⽹上的说法为:假设当前决策结果是f[n],则最优⼦结构就是要让f[n-k]最优,最优⼦结构性质就是能让转移到n的状态是最优的,并且与后⾯的决策没有关系,即让后⾯的决策安⼼地使⽤前⾯的局部最优解的⼀种性质。
关键字解读为:当前的决策与后⾯的决策是⽆关的, f[n-k]是最优的,转移到f[n]的状态是最优的2. 动态规划算法的⼀般步骤和难点使⽤动态规划算法解决问题的⼀般步骤是:找到问题的最优解的性质,⽤数学公式或者算法描述拆解⼦问题,确定问题的递推结构,保证可以收敛。
⽤知乎⼤神们的总结就是:找到问题的状态描述和状态转移⽅程。
3. 动态规划算法的分类和理解根据我的理解,以及⽹上的说法,我把动态规划算法分为三个类别和层次:简单动态规划算法,即状态⽅程是⽤⼀个维度的变量的描述的,常见的问题如:斐波那契数列,爬台阶问题等 爬台阶问题问题描述:有⼀座⾼度是10级台阶的楼梯,从下往上⾛,每跨⼀步只能向上1级或者2级台阶。
要求⽤程序来求出⼀共有多少种⾛法。
状态描述:我们使⽤变量n表⽰台阶的级数,F(n)表⽰n级台阶⼀共有多少种⾛法 状态转移⽅程与问题分解:根据每次能跨越的台阶数⽬:1级台阶或者2级台阶,因为⾛到N级台阶之前,⼈⼀定是处于N-1级台阶或者N-2级台阶。
F(n)的⾛法,⼀定是n-1级别的台阶的所有的⾛法和n-2级别台阶的所有⾛法之和。
F(n) = F(n-1) + F(n-2); 关于状态的分解,更详细的说明,可以看这篇⽂章:。
动态规划算法及其应用案例解析

动态规划算法及其应用案例解析动态规划算法是计算机科学中一种非常重要的算法,它在许多领域都有大量的应用。
在本文中,我们将介绍动态规划算法的基本思想和特点,并通过一些常见的应用案例来深入理解这个算法。
1. 动态规划算法的基本思想动态规划算法是一种算法设计技术,用于在多阶段决策过程中寻找最优解。
它的基本思想是将一个大问题分解成较小的子问题来解决,然后将这些子问题的解组合起来得到原问题的解。
它与分治算法很类似,但是动态规划算法通常是针对问题的重复性结构进行优化的。
动态规划算法通常适用于满足以下几个条件的问题:(1)问题具有重叠子问题的特点,即一个大问题可以分解为多个子问题,且这些子问题存在相同的子结构;(2)问题具有最优子结构的特点,即一个问题的最优解包含其子问题的最优解。
通过以上两个条件,在通过子问题的最优解推导出大问题的最优解时,我们可以避免重复计算并且保证得到的结果是最优的。
2. 动态规划算法的特点动态规划算法的主要特点包括以下几个方面:(1)动态规划算法使用一个递推公式来计算问题的解,这个递推公式通常是由原问题和子问题之间的关系建立而来的。
(2)动态规划算法使用一个表格来存储子问题的解,这个表格通常称为动态规划表或者状态转移表。
(3)动态规划算法通常需要进行一些预处理操作,例如初始化表格的值,以及确定递推公式的边界条件。
(4)动态规划算法的时间复杂度通常是由子问题的个数和计算每个子问题的时间复杂度来决定的。
3. 应用案例解析下面我们将通过一些常见的应用案例来更好地理解动态规划算法。
(1)背包问题背包问题是指给定一组物品和一个容量为W的背包,选择一些物品放入背包中,使得放入背包的物品的总价值最大。
这个问题可以通过动态规划算法来解决。
我们可以定义一个二维数组f[i][j],表示前i个物品放进容量为j的背包所得到的最大价值。
递推公式可以定义为:f[i][j] = max(f[i-1][j], f[i-1][j-w[i]] + v[i]),其中w[i]表示第i个物品的重量,v[i]表示第i个物品的价值。
动态规划算法原理及应用

动态规划算法原理及应用动态规划算法(Dynamic Programming,DP)是一种通过将问题分解为子问题来解决复杂问题的方法。
其核心思想就是将原问题分解为若干个子问题,先求解子问题,然后再根据子问题的解得出原问题的解。
1.定义子问题:将原问题分解为若干个子问题,每个子问题都是原问题的一个子集。
2.构建状态转移方程:根据子问题的关系,建立状态转移方程来描述问题的解。
3.确定边界条件:确定问题的边界条件,即当问题规模很小的时候可以直接求解的情况。
4.自底向上求解:根据状态转移方程,自底向上地求解子问题,最终得到原问题的解。
1.背包问题:给定一个背包的容量和一系列物品的重量和价值,选择若干个物品放入背包中,使得背包的总重量不超过容量,同时总价值最大化。
2.最长公共子序列(LCS)问题:给定两个字符串,求它们的最长公共子序列,即两个字符串中都出现的最长的子序列。
3.最短路径问题:给定一个有向带权图和两个顶点,求两个顶点之间的最短路径。
4.最大连续子序列和问题:给定一个整数数组,找到一个具有最大和的连续子序列。
5.斐波那契数列:求解斐波那契数列中第n个数的值。
其中,斐波那契数列的定义为:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2),n>11.避免了重复计算:动态规划算法使用备忘录或者数组来存储中间计算结果,避免了重复计算,提高了效率。
2.自底向上求解:动态规划算法从最小的子问题开始求解,逐步拓展到原问题,保证了每个子问题都是已经求解过的。
3.可通过状态压缩进行优化:动态规划算法中,可以根据具体问题的特点,通过状态压缩来减少空间复杂度。
然而,动态规划算法也有一些限制:1.无法应用于所有问题:动态规划算法要求问题满足最优子结构的性质,因此不是所有问题都可以使用动态规划算法来解决。
2.有时需要额外的空间和时间:动态规划算法可能需要使用额外的空间来存储中间结果,同时也需要额外的时间来计算和存储中间结果。
动态规划算法教学PPT

03
动态规划算法的实现步骤
明确问题,建立数学模型
1
确定问题的目标和约束条件,将其转化为数学模 型。
2
理解问题的阶段划分,将问题分解为若干个子问 题。
3
确定状态变量和决策变量,以便描述子问题的状 态和决策。
划分阶段,确定状态变量和决策变量
01
根据问题的阶段划分,将问题分解为若干个子问题。
02
确定状态变量和决策变量,以便描述子问题的状态 和决策。
02
将子问题的最优解组合起来,得到原问题的最优解。
对最优解进行验证和性能评估,确保其满足问题的要求。
03
04
动态规划算法的优化技巧
分支定界法
分支定界法是一种求解优化问题的算 法,它通过不断生成问题的分支并确 定每个分支的界限,来寻找最优解。 在动态规划中,分支定界法可以用来 优化状态转移方程,减少计算量。
详细描述
多目标规划问题在实际生活中应用广泛,如资源分配、项目计划、城市规划等领 域都有涉及。常用的求解多目标规划的方法包括权重和法、帕累托最优解等。
多阶段决策问题
总结词
多阶段决策问题是动态规划中的一类,解决的问题需要在多个阶段做出决策,每个阶段的决策都会影响到后续阶 段的决策。
详细描述
多阶段决策问题在实际生活中应用广泛,如生产计划、库存管理、路径规划等领域都有涉及。常用的求解多阶段 决策问题的方法包括递归法、动态规划等。
特点
动态规划算法具有最优子结构、重叠 子问题和最优解性质等特征。
动态规划算法的应用领域
计算机科学
在计算机科学中,动态规划算法广泛应用于字符 串处理、排序、数据压缩和机器学习等领域。
电子工程
在电子工程中,动态规划算法用于信号处理、通 信和控制系统等领域。
动态规划算法(一)

动态规划:向后处理(K段图)Байду номын сангаас
BC ( i,j) O m S B iT n C ( i 1 ,O l) c ( l,S j) T l V i 1 l,j E
动态规划:0/1背包问题
对于0/1背包问题,可以通过作出变量x1,x2,…,xi的一个 决策序列来得到它的解。而对变量x的决策就是决定它 们是取0还是取1值。
动态规划:0/1背包-向后处理
先求解f0: i> 当x≥0,f0(x)=0 ii> 当x<0, f0(x)=-∞
利用递推式,求出f1, f2, …, fn
动态规划:0/1背包求解实例
考虑如下背包问题: n=3 (w1, w2, w3)=(2, 3, 4) (p1, p2, p3)=(1,2,5) M=6
求解过程(图解法求解):
i=3: f2(x-w3)+p3
8 7 6 5 4 3 2 1
12
567
9
f3(x)
8 7 6 5 4 3 2 1
1234
67
9
动态规划:0/1背包-向后处理
i=1: f0(x-w1)+p1
f1(x)
2 1
2
6
i=2: f1(x-w2)+p2
3 2 1
2
56
2 1
2
6
f2(x)
C( O i,j) S m T c (ij,l n ) CO (i 1 ,l) ST l V i 1 j,lE
动态规划:向前处理算法
void function FGRAPH(E, int k, int n, int P[]){ int COST[n]; int D[n-1]; int r, j; COST[n]=0; for(j=n-1; j<=1; j--){ r是这样的节点,<j,r>∈E且使c(j,r)+COST[r]最小 COST[j]=c(j,r)+COST[r]; D[j]=r; } P[1]=1; P[k]=n; for(j=2;j<=k-1;j++){ P[j]=D[P(j-1)]; }
动态规划1

背包问题
多重背包 也就是0-(00001 - 1)的数 我们求出x=20+......+2k使得x<=c的最大的k 然后定义y=c-x 我们可以得知,只有第一位是1,只有第二位是1.......只有第(k+1)位是1 的数能组成0-x的所有数,设他们能组成z,那么z+y<=x+y=c,不会越界
背包问题
动态规划
基础知识
dp算法即把原问题分解为多个子问题,每个子问题求解完才解决下一个子 问题的方法(个人理解)
基础知识
dp算法即把原问题分解为多个子问题,每个子问题求解完才解决下一个子 问题的方法(个人理解) dp的条件: (1)无后效性(a由b转移过来,b不需要从a转移)
基础知识
dp算法即把原问题分解为多个子问题,每个子问题求解完才解决下一个子 问题的方法(个人理解) dp的条件: (1)无后效性(a由b转移过来,b不需要从a转移) (2)最优子结构(局部最优解要求能组成总体最优解)
背包问题
多重背包 第三种是单调队列,明天讲
背包问题
分组背包 给定n组物品,每组物品有c个物品,然后依旧有价值和体积,然后问容积 位m的背包最多能获得多少价值
背包问题
分组背包 这个问题比较简单
背包问题
分组背包 这个问题比较简单 f[i,j]表示前i组物品组成体积为j时获得的最大价值 f[i,j]=f[i-1,j-v[k]]+w[k](枚举由这组里面扔哪个物品进去) f[i,j]=f[i-1,j] 取max即可
石子合并 设计方程f[i,j]表示把第i堆石子到第j堆石子合并需要最小代价 sum数组表示前缀和,用来计算某个区间重量和
区间dp
石子合并 设计方程f[i,j]表示把第i堆石子到第j堆石子合并需要最小代价 sum数组表示前缀和,用来计算某个区间重量和 f[i,j]=f[i,k]+f[k+1,j]+sum[j]-sum[i-1]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
V1
9
V2 2
1 3 4 11 5 11
V3 4 2 6 2 7 7 8 6 5 4 5 6
V4 9
V5
4 2 12 t
s 1
7 3 2
3
10 11
5
8
多段图的向前处理算法
为了使写出的算法更简单一些,可事先对结点集V的结 点按下述方式排序:首先将s 结点编成1号,然后对V2 中的结点编号,V3的结点接着V2中的最后一个编号继 续往下编……最后将t 编成n号。 经过这样编号,Vi+1中结点的编号Vi 均大于中结点的 编号。于是,COST和D都可按n-1,n-2,……,1的次序计 算,而无需考虑COST、P和D中标识结点所在段数的 第一下标,因此它们的第一下标可在算法中略去。
求解多段图问题的动态规划算法
首先根据前面介绍的向前处理法列出求取s到t的最小成本路径的 递推式。 边的成本
多段图向前处理的算法 设P(i, j)是一条从Vi中的节点j 到汇点t 的最小成本路径, COST(i, j)表示这条路径的成本,根据向前处理方法有 (5-1): (i, j) min {c( j , l ) COST (i 1, l )} COST
V4
V5
6
9
2 5 6 11
s 1
7 3 2
3
4
7
5
10
12 t
4 11
5
11
8
8
COST(3,6)=min{6+COST(4,9), 5+COST(4,10)}=7 COST(3,7)=min{4+COST(4,9), 3+COST(4,10)}=5 COST(3,8)=min{5+COST(4,10), 6+COST(4,11)}=7
V1
V2 2 9 1 4 2 2 7
V3 6 5 4 3V4V5 Nhomakorabea6
9
2 5 6 11
s 1
7 3 2
3
4
7
5
10
12 t
4 11
5
11
8
8
COST(2,2)=min{4+COST(3,6), 2+COST(3,7), 1+COST(3,8)}=7 COST(2,3)= min{2+COST(3,6), 7+COST(3,7)}= 9 COST(2,4)= min{11+COST(3,8)}= 18 COST(2,5)= min{11+COST(3,7), 8+COST(3,8)}= 15
lVi 1 j ,l E
V1 9
s 1 7 3 2
V2 2 3
4 1
V3 4
V4
V5 4 2 5
12 t
2 2 7
8
6 7 8
5 4
6
3 6
9 10 11
11 5 11
5
多段图的向前处理算法
若<j, t> ∈E成立,有COST(k-1,j)=c(j,t),若<j, t> ∈E不 成立,则有COST(k-1,j)=∞,所以可以通过如下步骤解 式公式(5-1),并最终求出COST(1,s)。 首先对于所有j∈Vk-2,计算COST(k-2, j),然后对所有 的j∈Vk-3, 计算COST(k-3, j)等等,最后计算出 COST(1, s)
多段图的向前处理算法
Line procedure FGRAP(E,k,n,P) real COST(n),integer D(n-1),P(k),r,j,k,n COST(n)0 for jn -1 to 1 by –1 do 设r是一个这样的结点,<j, r>∈E且使c(j,r)+COST(r)取小值 COST(j)c(j,r)+COST(r) D(j)r 计算出COST(j)的值, repeat 并找出一条最小成本 P(1)1;P(k)n 路径 for j2 to k-1 do P(j)D(P(j-1)) 找出最小成本路径 repeat 上的第j个结点 End FGRAPH
n=12 , k=5 ;
COST(n)=COST(12)=0;执行For循环,计算出各COST(j)的值:
j=n-1=11 , COST(11)=5 , D(11)=12 ; j=n-2=10,COST(10)=2 , D(10)=12; j=n-3=9,COST(9)=4, D(9)=12 ; j=n-4=8 , COST(8)=7, D(8) =10 ; j=n-5=7 , COST(7)=5 , D(7) =10; j=n-6=6 , COST(6)=7, D(6) =10 ; j=n-7=5 , COST(5)=15 , D(5) =8; V1 9 V2 2 1 7 3 2 3 4 11 5 11 8 8 V3 4 2 2 7 6 7 5 4 5 6 11 V4
•可以使用多段图的路径总数来度量游戏好玩度,路径总数 越多则玩法越多,则玩家越认为好玩。 •最长路径代表游戏最长通关时间,因此若发现最长路径太 长,玩家会厌倦,则调整边,使之适合。 •若出现环,则游戏无法结束,则为游戏设计的失败。 •最短路径代表游戏的最短通关时间,若路径太短,则代表 游戏有Bug,使玩家进入无敌状态,游戏很快被玩完,则为 游戏设计失败。 流水装配线
V1
V2 2
V3 4 1
V4 6 5 4 3 6
V5
9
s 1 7 3 2
3 4 11 5
11
2 6 2 7 7
8
9 10
11 2 5
4 12 t
5
8
设这条最小成本路径是s=l ,v2,v3,…,vk-1, t=12。则可得 知: v2=D(1, 1)=2,v3=D(2 , D(1,1))= D(2,2)= 7 和 v4=D(3 , D(2, D(1, 1)))= D(3, D(2,2))= D(3, 7)=10 所以最短路径的结点序列为:s -> 2 -> 7 -> 10 -> t 。
F0 F1 1
动态规划是运筹学的一个分支,是求解决策过程(Decision Process)最优化的数学方法。
20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决 策过程(multistep decision process)的优化问题时,提出 了著名的最优化原理(Principle of Optimality),将多阶段决 策过程转化为一系列的单阶段决策问题,并创立了解决这类过程 优化问题的新方法—动态规划,于1957年出版了他的名著 《Dynamic Programming》,是该领域的第一本著作。
V5
4
6
9
s 1
3
10
2
5
12 t
j=n-8=4 , COST(4)=18 , D(4)=8 ; j=n-9=3 , COST(3)=9 , D(3)=6 ; j=n-10=2 , COST(2)=7, D(2) =7 ; j=n-11=1 , COST(1)=16 , D(1)=2; 找出最小成本路径上的各个结点编号:P(1)=1; P(k)=P(5)=n=12; 执行For循环,求出各P(j)的值:P(2)=D(P(1))=D(1)=2;
多段图问题的最优化原理证明
证明最优化原理对多段图成立: 假设s,v2,v3,…,vk-1,t是一条由s到t的最短路径 再假设从源点s开始,已作出了到结点v2的决策,因此 v2就是初始决策所产生的状态 如果把v2看成是原问题的一个子问题的初始状态,解 决这个子问题就是找出一条由v2到t的最短路径 这条最短路径显然是v2,v3,…,vk-1,t 如果不是,设v2,q3,…,qk-1,t由v2到t的一条更短路径, 则s,v2,q3,…,qk-1,t是一条比路径s,v2,v3,…,vk-1,t更短的由 s到t的路径。这与假设矛盾,因此最优性原理成立。
V3 V 22 4 6 31 2 27 7 4 11 8 5 11 8
6 5 43 56
V4 9
10
11
V5 4 2 5
12
t
游戏的多段图描述
玩游戏的过程本质为一个多阶段决策过程,即玩家目前所采取的操 作(决策)影响以后的游戏状态以及决策,玩家经过多个决策过程 成才可将游戏玩完通关。
游戏可描述为多段图(并且游戏多为关卡回合制)即游 戏关卡的拓扑结构可以用多段图来表示。从而可以利用多 段图来描述游戏的某些性质。 游戏好玩度为游戏性质之一,因此,可以用多段图理论对此 游戏性质进行量化评价,并且可用多段图理论指导游戏关卡 设计.
多段图问题
多段图问题
V2 2 9 1 7 3 3 4 2 2 7 6 6 5 4 3 9 2 5 6 11 4 V3 V4 V5
V1
s 1
7
5
10
12 t
2
4 11 5 11 8 8
多段图问题
V1
9 1 7 s 3 多段图G=(V, E)是—个有向图。 2
它具有如下特性: 图中的结点被划分成k≥ 2个不相交的集合 Vi ,1≤i≤k,其中V1和Vk分别只有一个结点s (源点) 和 t ( 汇点)。 图中所有的边<u,v>均具有如下性质:若u∈Vi ,则 v ∈Vi+1 ,1≤i≤k,且每条边<u, v>均附有成本c(u, v)。 从s到t的一条路径成本是这条路径上边的成本和。 多段图问题(multistage graph problem)是求由s到 t的最小成本路径。
在计算每一个COST(i, j)的同时,记下每个状态(结点j)所做出的决策 (即,使 c(j,l )+cost(i+1,l )取最小值的l 值),设它为D(i, j),则可容 易地求出这条最小成本路径。 D(3,6)=10 D(3,7)=10 D(3,8)=10 D(2,2)=7 D(2,3)=6 D(2,4)=8 D(2,5)=8 D(1,1)=2