动态规划作业完整
- 格式:docx
- 大小:65.46 KB
- 文档页数:10
动态规划讲解大全含例题及答案动态规划讲解大全动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。
20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。
1957年出版了他的名著Dynamic Programming,这是该领域的第一本著作。
动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。
例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。
虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。
动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。
不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。
动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。
因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。
我们也可以通过对若干有代表性的问题的动态规划算法进行分析、讨论,逐渐学会并掌握这一设计方法。
基本模型多阶段决策过程的最优化问题。
在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。
动态规划练习题[题1] 多米诺骨牌(DOMINO)问题描述:有一种多米诺骨牌是平面的,其正面被分成上下两部分,每一部分的表面或者为空,或者被标上1至6个点。
现有一行排列在桌面上: 顶行骨牌的点数之和为6+1+1+1=9;底行骨牌点数之和为1+5+3+2=11。
顶行和底行的差值是 2.这个差值是两行点数之和的差的绝对值。
每个多米诺骨牌都可以上下倒置转换,即上部变为下部,下部变为上部.现在的任务是,以最少的翻转次数,使得顶行和底行之间的差值最小.对于上面这个例子,我们只需翻转最后一个骨牌,就可以使得顶行和底行的差值为0,所以例子的答案为1.输入格式:文件的第一行是一个整数n(1〈=n<=1000〉,表示有n个多米诺骨牌在桌面上排成一行。
接下来共有n行,每行包含两个整数a、b(0〈=a、b〈=6,中间用空格分开〉。
第I+1行的a、b分别表示第I个多米诺骨牌的上部与下部的点数(0表示空).输出格式:只有一个整数在文件的第一行。
这个整数表示翻动骨牌的最少次数,从而使得顶行和底行的差值最小。
[题2]Perform巡回演出题目描述:Flute市的Phlharmoniker乐团2000年准备到Harp市做一次大型演出,本着普及古典音乐的目的,乐团指挥L.Y。
M准备在到达Harp市之前先在周围一些小城市作一段时间的巡回演出,此后的几天里,音乐家们将每天搭乘一个航班从一个城市飞到另一个城市,最后才到达目的地Harp市(乐团可多次在同一城市演出).由于航线的费用和班次每天都在变,城市和城市之间都有一份循环的航班表,每一时间,每一方向,航班表循环的周期都可能不同。
现要求寻找一张花费费用最小的演出表。
输入:输入文件包括若干个场景.每个场景的描述由一对整数n(2〈=n〈=10)和k(1〈=k<=1000)开始,音乐家们要在这n个城市作巡回演出,城市用1..n标号,其中1是起点Flute市,n是终点Harp市,接下来有n*(n-1)份航班表,一份航班表一行,描述每对城市之间的航线和价格,第一组n—1份航班表对应从城市1到其他城市(2,3,..。
动态规划练习题USACO 2.2 Subset Sums题目如下:对于从1到N的连续整集合合,能划分成两个子集合,且保证每个集合的数字和是相等的。
举个例子,如果N=3,对于{1,2,3}能划分成两个子集合,他们每个的所有数字和是相等的:and {1,2}这是唯一一种分发(交换集合位置被认为是同一种划分方案,因此不会增加划分方案总数)如果N=7,有四种方法能划分集合{1,2,3,4,5,6,7},每一种分发的子集合各数字和是相等的:{1,6,7} and {2,3,4,5} {注1+6+7=2+3+4+5}{2,5,7} and {1,3,4,6}{3,4,7} and {1,2,5,6}{1,2,4,7} and {3,5,6}给出N,你的程序应该输出划分方案总数,如果不存在这样的划分方案,则输出0。
程序不能预存结果直接输出。
PROGRAM NAME: subsetINPUT FORMAT输入文件只有一行,且只有一个整数NSAMPLE INPUT (file subset.in)7OUTPUT FORMAT输出划分方案总数,如果不存在则输出0。
SAMPLE OUTPUT (file subset.out)4参考程序如下:#include <fstream>using namespace std;const unsigned int MAX_SUM = 1024;int n;unsigned long long int dyn[MAX_SUM];ifstream fin ("subset.in");ofstream fout ("subset.out");int main() {fin >> n;fin.close();int s = n*(n+1);if (s % 4) {fout << 0 << endl;fout.close ();return ;}s /= 4;int i, j;dyn [0] = 1;for (i = 1; i <= n; i++)for (j = s; j >= i; j--)dyn[j] += dyn[j-i];fout << (dyn[s]/2) << endl;fout.close();return 0;}USACO 2.3 Longest Prefix题目如下:在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。
动态规划例题动态规划是一种以最优化原理为基础的问题求解方法,通过拆分问题为若干阶段,每个阶段求解一个子问题,再逐步推导出整个问题的最优解。
例如,有一个背包能够承受一定的重量,现有一些物品,每个物品都有自己的重量和价值。
我们希望将物品放入背包中,使得背包的总价值最大。
这个问题可以用动态规划来解决。
首先,我们定义一个二维数组dp,其中dp[i][j]表示在前i个物品中,容量为j的背包中所能放入的物品的最大价值。
那么,对于每一个物品,可以选择放入背包或者不放入背包。
如果选择放入背包,最大价值为dp[i-1][j-w[i]] + v[i],其中w[i]表示第i个物品的重量,v[i]表示第i个物品的价值。
如果选择不放入背包,最大价值为dp[i-1][j]。
因此,dp[i][j]的状态转移方程为:dp[i][j] = max(dp[i-1][j-w[i]] + v[i], dp[i-1][j])。
基于这个状态转移方程,可以逐步求解从第1个物品到第n个物品的最大价值。
最终,dp[n][W]即为问题的最优解,其中W 表示背包的容量。
举个简单的例子,假设背包的容量为10,有3个物品,它们的重量分别为3、4、5,价值分别为4、5、6。
此时,可以得到如下的dp矩阵:0 0 0 0 0 0 0 0 0 0 00 0 0 4 4 4 4 4 4 4 40 0 0 4 5 5 9 9 9 9 90 0 0 4 5 5 9 10 10 14 14我们可以看到,dp[3][10]的最大价值为14,表示在前3个物品中,容量为10的背包中所能放入的物品的最大价值为14。
通过动态规划,我们可以有效地求解背包问题,得到物品放入背包的最优解。
这个例子只是动态规划的一个简单应用,实际上,动态规划可以解决各种复杂的问题,如最长公共子序列、最大子数组和、最大字段和等。
因此,学习动态规划是非常有意义的。
动态规划习题Document serial number【NL89WT-NY98YT-NC8CB-NNUUT-NUT108】动态规划专题分类视图数轴动规题:题1.2001年普及组第4题--装箱问题【问题描述】有一个箱子容量为V(正整数,0≤V≤20000),同时有n个物品(0<n≤30),每个物品有一个体积(正整数)。
要求从n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
【输入格式】输入文件box.in有若干行。
第一行:一个整数,表示箱子容量V;第二行:一个整数,表示物品个数n;接下来n行,分别表示这n个物品的各自体积。
【输出格式】输出文件box.out只有一行数据,该行只有一个数,表示最小的箱子剩余空间。
【输入样例】2468312797【输出样例】题2.1996年提高组第4题--砝码秤重__数据加强版【问题描述】设有n种砝码,第k种砝码有Ck 个,每个重量均为Wk,求:用这些砝码能秤出的不同重量的个数,但不包括一个砝码也不用的情况。
【输入格式】输入文件weight.in的第一行只有一个数n,表示不同的砝码的种类数.第2行至第n+1行,每行有两个整数.第k+1行的两个数分别表示第k种砝码的个数和重量.【输出格式】输出文件weight.out中只有一行数据:Total=N。
表示用这些砝码能秤出的不同重量数。
【输入样例】22223【输出样例】Total=8【样例说明】重量2,3,4,5,6,7,8,10都能秤得【数据限制】对于100%的数据,砝码的种类n满足:1≤n≤100;对于30%的数据,砝码的总数量C满足:1≤C≤20;对于100%的数据,砝码的总数量C满足:1≤C≤100;对于所有的数据,砝码的总重量W满足:1≤W≤400000;题3.石子归并-szgb.pas【问题描述】有一堆石头质量分别为W1,W2,…,Wn.(Wi≤10000),将石头合并为两堆,使两堆质量的差最小。
【输入】输入文件szgb.in的第一行只有一个整数n(1≤n≤50),表示有n堆石子。
动态规划算法作业动态规划是一种解决多阶段决策问题的优化方法。
在这种方法中,我们将问题划分为多个子问题,并通过解决这些子问题来求解原始问题的最优解。
动态规划可以应用于各种领域,如经济学、制造业、计算机科学等,在优化问题中经常被使用。
1.状态定义:确定问题的子问题以及每个子问题的状态。
状态是问题的关键属性,这些属性在问题的不同阶段保持不变。
2.状态转移方程:表示问题的子问题之间的关系。
它描述了如何从一个子问题转移到下一个子问题。
通过状态转移方程,我们可以推导出子问题的最优解。
3.初始条件:定义问题的起始状态。
这通常是问题的边界条件,如在第一个阶段的子问题中,我们需要定义初始状态。
4.最优解的计算:通过迭代计算,我们可以逐步解决子问题,并最终求解出原始问题的最优解。
这通常通过填充一个表或者使用递归函数来实现。
为了更好地理解动态规划算法的应用,我们可以考虑以下两个经典问题。
1.背包问题:有一个容量为C的背包和一组物品。
每件物品有一个重量和价值。
我们的目标是选择物品,使其总重量不超过背包的容量,同时价值最大化。
我们可以使用动态规划来解决这个问题。
我们定义一个二维表,其中每一行表示一个物品,每一列表示背包的容量。
通过填充这个表,我们可以计算出每个子问题的最优解,并最终得出最优解。
2.最长公共子序列问题:给定两个字符串,求它们的最长公共子序列。
子序列在原字符串中不一定是连续的,但保持原有顺序。
我们可以使用动态规划来解决这个问题。
我们定义一个二维表,其中每个单元格表示两个字符串的子问题。
通过填充这个表,我们可以逐步计算出更长子序列的最优解,并最终得出最长公共子序列。
动态规划算法的优点是可以减少问题的重复计算,并且可以避免使用递归导致的堆栈溢出。
然而,这种算法也存在一些局限性。
首先,动态规划算法需要定义子问题以及状态转移方程,这在一些问题中可能会很困难。
其次,动态规划算法的时间复杂度通常较高,特别是对于一些大规模问题。
动态规划作业1、1、设某工厂自国外进口一部精密机器,由机器制造厂至出口港有三个港口可供选择,而进口港又有三个可供选择,进口后可经由两个城市到达目的地,其间的运输成本如图中所标的数字,试求运费最低的路线?把A看作终点,该问题可分为4个阶段。
f k(S k)表示从第K阶段点S k到终点A的最短距离。
f4(B1)=20,f4(B2)=40,f4(B3)=30f3(C1)=min[d3(C1,B1)+ f4(B1), d3(C1,B2)+ f4(B2), d3(C1,B3)+ f4(B3) ]=70,U3(C1)= B2 或B3f3(C2)=40 ,U3(C2)= B3f3(C3)=80 ,U3(C3)= B1或B2 或B3f2(D1)=80 ,U2(D1)= C1f2(D2)=70 ,U2(D2)= C2f1(E)=110 ,U1(E)= D1或D2所以可以得到以下最短路线,E→D1→C1→B2 / B3→AE→D2→C2→B3→A2、习题4-2解:1)将问题按地区分为三个阶段,三个地区的编号分别为1、2、3;2)设Sk表示为分配给第k个地区到第n个地区的销售点数,Xk表示为分配给第k个地区的销售点数,S k+1=S k-X kPk(Xk)表示为Xk个销售点分到第k个地区所得的利润值fk(Sk)表示为Sk个销售点分配给第k个地区到第n个地区的最大利润值3)递推关系式:fk(Sk)=max[ Pk(Xk)+ f k+1(S k-X k) ] k=3,2,1f4(S4)=04)从最后一个阶段开始向前逆推计算第三阶段:设将S3个销售点(S3=0,1,2,3,4)全部分配给第三个地区时,最大利润值为:f3(S3)=max[P3(X3)] 其中X3=S3=0,1,2,3,4表1第二阶段:设将S2个销售点(S2=0,1,2,3,4)分配给乙丙两个地区时,对每一个S2值,都有一种最优分配方案,使得最大盈利值为:f2(S2)=max[ P2(X2)+ f3(S2-X2) ]其中,X2=0,1,2,3,4表2第一阶段:设将S1个销售点(S1=4)分配给三个地区时,则最大利润值为:f1(S1)=max[ P1(X1)+ f2(4-X1) ]其中,X1=0,1,2,3,4表3然后按计算表格的顺序反推,可知最优分配方案有两个:最大总利润为531)由X1*=2,X2*=1,X3*=1。
动态规划作业1、1、设某工厂自国外进口一部精密机器,由机器制造厂至出口港有三个港口可供选择,而进口港又有三个可供选择,进口后可经由两个城市到达目的地,其间的运输成本如图中所标的数字,试求运费最低的路线?把A看作终点,该问题可分为4个阶段f k(S k)表示从第K阶段点S k到终点A的最短距离f4(B i)=20, f4(B2)=40, f4(B3)=30f3(C i)=min[d 3(C i, B i)+ f4(B i), d3(C i, B2)+ f4(B2), d3(C i, B3)+ f4(B3)]=70,U3(C l)= B2 或B3f3(C2)=40,U3(C2)= B3f3(C3)=80,U3(C3)= B l 或B2 或B3以D i)=80,U2(D I)=C If2(D2)=70,U2(D2)= C2f i(E)=110,U i(E)= D i 或D2所以可以得到以下最短路线,E T D I^C I^B 2 / B3^AE TD 2^C 2TB 3—A2、习题4 — 2解:1)将问题按地区分为三个阶段,三个地区的编号分别为1、2、3;2)设Sk表示为分配给第k个地区到第n个地区的销售点数,Xk表示为分配给第k个地区的销售点数,S k +1 = S k —X kPk(Xk)表示为Xk个销售点分到第k个地区所得的利润值fk(Sk)表示为Sk个销售点分配给第k个地区到第n个地区的最大利润值3)递推关系式:fk(Sk) = max[ Pk(Xk)+ f k+i(S k —X k) ] k=3,2,1f4(S4) = 04)从最后一个阶段开始向前逆推计算第三阶段:设将S3个销售点(S3= 0,1,2,3,4)全部分配给第三个地区时,最大利润值为:f3(S3)= max[P3(X3)] 其中X3 = S3= 0,1,2,3,4表1第二阶段:设将S2个销售点(S2= 0,1,2,3,4)分配给乙丙两个地区时,对每一个S2值,都有一种最优分配方案,使得最大盈利值为: f2(S2)= max[ P2(X2)+ f3(S2 —X2)]其中,X2= 0,1,2,3,42第一阶段:设将S1个销售点(S1 = 4)分配给三个地区时,则最大利润值为: f1(S1)= max[ P1(X1)+ f2(4 —X1)]其中,X1 = 0,1,2,3,4表3然后按计算表格的顺序反推,可知最优分配方案有两个:最大总利润为531)由X1* = 2, X2* = 1, X3* = 1。
即得第一个地区分得2个销售点,第二个地区分得1个销售点,第三个地区分得1个销售点2)由X1* = 3, X2* = 1, X3* = 0。
即得第一个地区分得3个销售点,第二个地区分得 1 个销售点,第三个地区分得0 个销售点。
3、某施工单位有500 台挖掘设备,在超负荷施工情况下,年产值为20 万元/台,但其完好率仅为0.4,在正常负荷下,年产值为15 万元/台,完好率为0.8。
在四年内合理安排两种不同负荷下施工的挖掘设备数量, 使第四年年末仍有 1 60台设备保持完好, 并使产值最高。
试求出四年内使得产值最高的施工方案和产值数。
解:1)该问题分成四个阶段,k表示年度,k = 1,2,3,42)设Sk 表示为分配给第k 年初拥有的完好挖掘设备数量,Uk 表示为第k 年初分配在超负荷下施工的挖掘设备数量,Dk (Sk)={ Uk|0 < Uk < Sk }Sk-Uk 表示为第k 年初分配在正常负荷下施工的挖掘设备数量。
状态转移方程:S k +1 = 0.4Uk +0.8(Sk —Uk), S1= 500 台3)设vk(sk,uk) 为第k 年度的产量,则vk = 20Uk +15(Sk —Uk)4故指标函数为V1,4= Vk(Sk,Uk)k1f k(Sk)表示由资源量Sk出发,从第k年开始到第4年结束时所生产的产量最大。
4)递推关系式:f k(Sk)= MAX{20 Uk +15(Sk —Uk)+f k+i[0.4Uk +0.8(Sk—Uk)]} k=1,2,3,45)从第 4 阶段开始,向前逆推计算当k = 4时,S5=160, 0.4U4 +0.8(S4-U4)=160 2S4-U4=400 U4=2S4-400f4(S4)= MAX{20 U4 +15(S4 —U4)+ f5[0.4U4 +0.8(S4 —U4)]} =MAX{5 U4 +15S4}=25S4-2000当k = 3时,f3(S3)= MAX{20 U3 +15(S3 —U3)+ f4[0.4U3 +0.8(S3 —U3)]} = MAX{5U3+15S3+25(0.8S3-0.4U3)-2000} =MAX{-5U3 +35S3-2000}故得最大解U3* = 0所以f3(S3) = 35 S3-2000依次类推,可求得:U2* = 0, f2(S2) = 43S2-2000U1* = 0, f1(S1) = 49.4S1-2000因为S1= 500 台,故f1(S1)= 22700 台最优策略为U1* = 0, U2* = 0, U3* = 0, U4* = 112已知S1= 500,S2= 0.4U1 *+0.8(S1 —U1*) = 0.8S1 = 400S3=0.4U2 *+0.8(S2—U2*)=0.8S2=320S4=0.4U3 *+0.8(S3—U3*)=0.8S3=256U4=2S4-400=112 S4-U4=256-112=144即前三年应把年初全部完好的挖掘设备投入正常负荷下施工,第四年应把年初 1 1 2台全部完好的挖掘设备投入超负荷下施工, 144台投入正常负荷下施工。
这样最高产量为22700 台4、某电视机厂为生产电视机而需生产喇叭,生产以万只为单位。
根据以往记录,一年的四个季度需要喇叭分别是 3 万、2 万、3 万、2 万只。
设每万只存放在仓库内一个季度的存储费为0.2 万元,每生产一批的装配费为 2 万元,每万只的生产成本费为 1 万元。
问应该怎样安排四个季度的生产,才能使总的费用最小?再生产点性质,Ci(Xi) 02 X X i i X0i 1,2, n hi ( Xi ) 0.2XiC(1,1)=C(3)+h(0)=5 C(1,2)=C(5)+h(2)=7.4C(1,3)=C(8)+h(5)+h(3)=11.6C(1,4)=C(10)+h(7)+h(5)+h(2)=14.8C(2,2)=C(2)+h(0)=4 C(2,3)=C(5)+h(3)=7.6C(2,4)=C(7)+h(5)+h(2)=10.4C(3,3)=C(3)+h(0)=5 C(3,4)=C(5)+h(2)=7.4C(4,4)=C(2)+h(0)=4f0=0 f1=f0+ C(1,1)=5 j(1)=1f2=min{f0+ C(1,2),f1+ C(2,2)}=min{0+7.4,5+4}=7.4 j(2)=1f3= min{f0+ C(1,3),f1+ C(2,3),f2+ C(3,3)}=min{0+11.6,5+7.6,7.4+5}=11.6 j(3)=1F4= min{f0+ C(1,4),f1+ C(2,4),f2+ C(3,4), f3+ C(4,4)}=min{0+14.8,5+10.4,7.4+7.4,11.6+4}=14.8 j(4)=1,3 当j(4)=1 ,X1=d1+d2+d3+d4=10,X2=0,X3=0,X4=080当 j(4)=3,X3二d3+d4=5,X4=0,X1二d1+d2=5,X2=05、 某工厂生产三种产品,各产品重量与利润关系如下表所示,现将此三种产品运往市场出售,运输能力总重量不超过6吨。
问如何 安排运输使总利润最大。
解:f 3 6 max 180x3 max(80Xl 130x2) max 180x3 f 2 6 4x3x3 0,1max 0 f 2 6 ,180 f 2 2 f 2 6 max 130x223x2 6max 130x2 f 1 6 x2 0,1,2max 0 f 1 6 ,130 max 240,210,260 260 x1 0f 2 2 max 130x23x2 2max 130x2 f 1 2x2 0f 1 2x1 1 f 3 6 max 260,260 260x1 0, x2 2, x3 0 x1 1,x20, x3 1max(80x1)3x2f 1 3 ,260 f 1 0 max(80x1) 3x26、某工厂在一年进行了A、B、C三种新产品试制,由于资金不足,估计在年内这三种新产品研制不成功的概率分别为0.40、0.60、0.80,因而都研制不成功的概率为0.4X 0.6X 0.8=0.192。
为了促进三种新产品的研制,决定增援2万元的研制费,并要资金集中使用,以万元为单位进行分配。
其增援研制费与新产品不成功的概率如下表所示。
试问如何分配费用,使这三秤新产品都研制不成功的概率为最小。
解:1) (1分)将问题按产品A、B、C分为三个阶段,k=1、2、3;2)(6分)设Sk表示第k阶段可分配给第k个产品到第n个产品的研制费,S1= 2Xk设为决策变量,表示第k阶段分配给第k个产品的研制费。
状态转移方程为Sk+ 1 = Sk—Xk允许决策集合:Dk(Sk) = { Xk I 0< Xk< Sk Xk为整数}Pk(Xk)表示为第k个产品失败的概率fk(Sk)表示为Sk万元研制费分配给第k个产品到第n个产品的最小的失败概率3)(4分)递推关系式:边界条件:f4(S4)= 1f k(Sk) = min[ Pk(Xk) 矗+1 (Sk —Xk) ] k=3,2,14)(11分)从最后一个阶段开始向前逆推计算第三阶段:设将S3万元研制费(S3= 0,1,2)全部分配给C产品时,最小的失败概率为:f3(S3)= min[P3(X3)] 其中X3 = S3= 0,1,2X3*表示使得f3(S3)为最大值时的最优决策。
第二阶段:设将S2万元研制费(S2= 0,1,2)分配给B、C产品时,最小的失败概率为:f2(S2) = min[ P2(X2) f3(S2 —X2)]其中,X2= 0,1,2第一阶段:设将S1万元研制费(S1= 2)分配给三个产品时,最小的失败概率为:f1(S1)= min[ P1(X1) f2(S1-X1)]其中,X1 = 0,1,25)即分配给A产品1万元,B产品0万元,C产品1万元,可使三个小组都失败的概率减小到0.060。