2008年动态规划复习
动态规划练习题(含答案)
动态规划练习题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题目如下:在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。
动态规划专项练习题解
另一种方法
• 将原串与原串的倒序做一次LCS—最长公 共子序列,用原串长度减去LCS长度,即 为需要插入字符的个数 • 例如:ab3bd与 db3ba • LCS(‘ab3bd’, ‘db3ba’)=‘b3b’ • 因此, ans=Len(‘ab3bd’)-Len(‘b3b’)=2
LCS的求法
• 最长公共子串(LCS),有三种情况: 1. 公共子串的元素必须相邻. 2. 公共子串的元素可以不相邻 3. 求多个字符串而不是两个字符串的最长公共 子串 • 动归4中,我们讲了求情况2的LCS序列。下面我们 来讨论情况1的做法。
• 任务:对于任意一个字符串,输出将这个字符串 变为回文串需要插入的最少字符个数,比如, ab3bd只需要插入2个字符就可以变为一个回文串. • 0<n<=1992,n为字符串长度。
分析
• ab3bd • 只需变为adb3bda即可,在前面插入d,在 后面插入a; • 我们分几种情况讨论:
– 若A形如 ?A?,(问号代表任意一个相同字符, 下同)则只需将A变为回文串。 – 若A形如?A再在A的后面插入一个”?” – 若A形如A ?再在A的前面插入一个”?”
分析
• 性质:青蛙遍历的路径不会相交。
• 上图中图2的路径比图1要短。 • 证明:图1: D1=d(1,3)+d(2,3)+d(2,4) 图2: D2=d(1,2)+d(2,3)+d(3,4) 要证明D1>D2,只要证明d(1,3) +d(2,4)>d(1,2)+d(3,4) 连接两边,见图3,由三角形的三边关系定理即可证明。
动态规划
• 设f(i,j)为将Ai..Aj变为回文串的最小代价,则
f (i 1, j 1), 若a[i] a[ j ] f (i, j ) min f (i 1, j ) 1, 若a[i] a[ j ],后插一个字符 f (i, j - 1) 1,若a[i] a[ j ],前插一个字符
动态规划讲义(一)
例2的简化版本
7 38 810 2744 45265 给出如上图所示的n层数字三角。现在从顶点出 发,每次只能向下或者向右下方移动一步。问 最多能获得的价值(经过方格的数字之和)是 多少?
如何储存数据
对于该类问题,我们要迅速的想到二维数 组。(因为数据有行信息与列信息这二维) 用数组map[i][j]表示第i行第j列的数值是多 少。当然,从c和c++语言出发,我们习惯 性的从第0行第0列开始计数。 于是我们用两重for循环读入数据 for(i=0;i<n;i++) for(j=0;j<=i;j++) scanf(“%d”,&map[i][j]);
-1 -2
动态规划与递推的关系 递推的关系
上题实质上是采用动态规划来求解,那么与递 上题实质上是采用动态规划来求解 那么与递 推动态规划之间到底是什么关系呢? 推动态规划之间到底是什么关系呢? 我们不妨画个图(如下图 如下图)。 我们不妨画个图 如下图 。而通常人们理解的 递推关系就是一般递推关系, 递推关系就是一般递推关系,故认为动态规 划与递推关系是两个各自独立的个体。 划与递推关系是两个各自独立的个体。
继续类比
此时,问题似乎并未得到解决。不妨再来 看样例中的3,4行。 810 2744 我们暂时不考虑第5行(即最后一层)的 影响。采用和刚才类似的思想:若终点为 (2,0),我们必然会选择(3,1)=7作为起点。 另外两个点完全做一样的贪心选择。
问题得解
现在我们加入第5行,即考虑3~5层 810 2744 45265 若目标为(2,0),则我们的选择可以分为两 步:首先从最后一行出发…. 聪明的你肯定已经发现,我们不需要再重 复的进行分析,之前的两次分析已经给出 了答案
08—09年期末考试算法设计与分析试卷B及答案
附表5:考试课程: 班级: 姓名: 学号:------------------------------------------------- 密 ---------------------------------- 封 ----------------------------- 线 ---------------------------------------------------------、⑴ 证明:令F (N )=O(f),则存在自然数N1、C1,使得对任意的自然数N 1N ≥,有: F(N));(1N f C ≤……………………………。
.(2分)同理可令G (N )=O (g ), 则存在自然数N2、C2,使得对任意的自然数N 2N ≥,有: G(N));(2N g C ≤ ……………………………。
(3分)令 C3=max{C1,C2},N3=max{N1,N2},则对所有的N 3N ≥,有: F(N));(3)(1N f C N f C ≤≤G (N ));(3)(2N g C N g C ≤≤ ……………………………..(5分) 故有:O(f )+O(g)=F(N)+G (N))())()((3)(3)(3g f O N g N f C N g C N f C +=+=+≤ 因此有:O (f )+O(g)=O(f+g) …………………………….。
(7分)⑵ 解:① 因为:;01033)103(lim 222=+-+∞→nn n n n n 由渐近表达式的定义易知: 103322+n n 是的渐近表达式。
……………………………。
.(3分) ② 因为:;0/12121)/121(lim=+-+∞→nn n 由渐近表达式的定义易知:21是21+1/n 的渐近表达式。
…………………………….。
(6分)2、解:经分析结论为:(1));5(log log 2+=n n θ…………………………。
Pascal动态规划-复习
[题2] 数塔
● 如下图所示的数塔,从顶部出发,在每一结点可以选择向左下走或是 向右下走,一直走到底层,要求找出一条路径,使路径上的数的和最 大。数塔层数用n表示,1<=n<=100。
[题2] 数塔
贪心法。时间上有保证,但得不到最优解。主要原因是贪心法只顾 眼前利益,不考虑长远利益。 在规定时间内得到正确结果,唯一的方法就是“动态规划”。
dpl(i,j)=min{dpl(i-1,j)+v(i,j),dpl(i,j-1)+h(i,j)}
[题5] 机器分配
【问题描述】 总公司拥有高效生产设备M台,准备分给下属的N个公司。各分公司
若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设
备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。 分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设
下面以示意图表示动态规划的过程:所选路径为:9-12-10-18-10
注意分析时,有以下几个特点:
(1)将问题划分成了4个阶段;
(2)每个阶段均得到了“部分”的最优解,得到最优解时,需要进行条件判断;
(3)从最下面一层往顶层推导。
[题3] 棋盘路径问题
【题目简介】 有一个n*m的棋盘,左下角为(1,1),右上角为(n,m),如下图: 有一颗棋子,初始位置在(1,1),该棋子只能向右走或者向上走,问该 棋子从(1,1)到(n,m)一共有几条路径? 输入:两个整数n和m 输出:一个数,路径总数
● 第i级台阶,可以从第i-2级台阶迈2级台阶到达,也 可以从第i-1级台阶迈1级台阶到达
上楼梯问题
● 慢在哪里?
● 重叠的问题被计算了多次! ● 例如:计算f[5]时,f[5]=f[3]+f[4];而f[4]=f[3]+f[2], 此时,f[3]又被计算了一遍。 ● 每次计算f[i]时,都要递归到f[0]或f[1]! ● 时间复杂度变成了O(N!)
2008年城市规划师考试《规划原理》真题回忆版
2008年城市规划师考试《规划原理》真题回忆版单选1.GNP -----国民生产总值2.京都议定书-------温室效应3.不属于总规强制性规定的是-----地下空间4.集中集约集聚-------B集中是人口的集中集约是产业的集约集聚是高效利用5.基尼系数------正确答案:居民收入分配不平均(答错!!!)6.城镇化-------城市生活方式向农村的扩散7.不包括------暂住三个月的人口8.区域对城市最大的影响-------城市性质和规模9.雅典卫城的核心-------广场(曾经在广场与神庙之间徘徊的好久!!!)10.马丘比丘宪章--------人与人的交往11.巴黎改建---------A.政府参与组织的城市更新(没找到道路改造的选项!!!)12.可识别性--------A.场所有清晰的意象和易于认识的熟悉13.不正确的是--------C.元大都皇城居中14.城市道路交通调查的目的--------分析交通存在问题的原因15.城市综合交通----------存在于城市中与城市有关的各种交通形式16.城市交通政策----------B.技术政策经济政策管理政策17.不正确的是---------城市道路高架(貌似也选错!!!)18.道路红线的定义-------道路用地与两侧建筑用地分界线的距离19.不属于第二产业的是----------正确答案:仓储物流业(MMD交卷前改成了采掘业!!!)20.历史文化错误的是---------重建部分历史建筑21.居住区划分原则不包括---------A.城乡统筹(完全不确定,但是感觉居住区跟城乡应该没太大联系吧!!!)22.电力规划不正确的是--------D要坚持....的战略(C是每个阶段都要预测供电负荷,偶选的D,应该错!!!)23.燃气规划在详规阶段不包括-------选择气源种类24.反映社会指标--------貌似自然增长率吧(可是我又改成了三废处理率,完全不搭边嘛!!!)25.竖向规划不包括--------C.改造地形26.近期规划正确的是--------A.城市规划的组成部分(不确定,书上又说是项计划,倒!!!)27.还是近期规划的-------宏观调控作用28.以下错误的是-------D.所有城市规划都要考虑中低收入人群的居住(题目记不起来了,前三个选项也忘!!!)29.修规的内容不包括-------绿化率.容积率等规定30.还是修规的---------分图图则31.规划条件的依据---------控规32.总规调查内容不包括---------D.用地权属(在规模和权属中艰难抉择!!!)33.反应地块开发强度---------容积率34.总规成果不包括--------远期规划图35.不属于法定规划的是---------B.......的修规(AC肯定是,莫非村庄规划不是!!!)36.正确的是--------C.所有镇都要依据镇规划标准(OMG又感觉好像不对哦!!!)37.城市规划的特点不包括-------战略性38.地景--------正确答案:岛屿礁(我选的沼泽滩涂!!!)39.关于控规不正确的是---------必须先修改总规40.非公共部门--------也可以实施城市规划41.不正确的是--------A.以划拨方式首先要申请建设用地规划许可证42.盆地城市主要受什么影响---------A静风频率43.不正确的是---------A.控规属于法规体系44.控规的强制性内容不包括---------后退距离45.表格题--------R1(试后想想好像应该是R2!!!)46.不正确的是----------A油库位于交通枢纽47.城市水源优先----------中水回用(不确定!!!)48.工业选址不正确的是---------B.危险性工业不靠近干线公路(貌似应该选地形平坦!!!)49.不对居住区人均建设有影响的是--------D绿化覆盖率50.离散程度分析--------标准差51.影响最小的是--------森林资源52.禁建区--------基本农田53.城市用水分为---------生活工业消防市政54.公交站---------50%55.分类正确的是----------C.公交保养场属于市政用地56.地下空间规划错误的是----------B以总规为依据(错!此项正确!书上原话!!!)57.可选择性活动---------喝咖啡观看路人58.高压走廊----------D.应避开规划的中心区59.不正确的是----------C.可持续发展的核心是保护生态环境60.华东小城市的住宅日照----------正确答案:大寒日3小时(OMG,偶选的寒2!!!)61.全国城镇体系规划的内容不包括---------各县城的分布62.省域城镇体系规划的内容不包括---------优先发展区.....(完全错误,但偶记不得剩下的答案了!!!)63.不正确的是---------人均用地不超过10064.规划总平与建筑设计的不同--------编制单位的资质(后来想想没那么简单,貌似应该选D群体单栋!!!)65.不属于消防设施的是----------消防通道66.历史文化名称----------名城街区文保单位67,雅典宪章不正确的是-----------与区域的联系68.居住区道路错误的是-----------B.独立的停车楼多选(没有特别确定的,将就着混个脸熟~~~)1.城镇布局中属于集中形态的是--------放射,星座(选项还有同心圆组团散点!!!)2.属于行政建制的是---------CE3.区域与城市的关系---------DE4.道路系统规划的要求------------骨架通道管线景观5.城镇体系的特性---------关联整体层次,还有一个忘了6.高速公路连接的正确方式---------压根没看答案7.居住小区以10000__15000是因为----------道路间距.配建设施门槛8.绿地旅计算不包括---------郊野公园,水源保护地9.城关镇控规正确的是---------ABCE除了要审查10.不应管线共沟的是----------胡选的AB11.风景名胜区划分为----------国家和省级12.城市规划的作用----------BCD,有配置空间资源嘛?13.可持续发展采用的措施----------忘选了公众参与,倒!14.多选第一题--------AE难道C只有大城市才有多核心结构也是对的嘛?。
Pascal动态规划-复习2
● (5)第三次计算结点为B1,B2,B3,而决 策输出结点可能为C1,C2,C3。仿前计算可 得Bl,B2,B3的决策路径为如下情况。 ● Bl:B1C1费用 12+8=20, 路径:B1+C1+D1+E B2:B2C1费用 6+8=14, 路径:B2+C1+D1+E B3:B2C2费用 12+7=19,路径:B3+C2+D2+E ● 此时也无法定下第一,二,三阶段的城市哪 三个将在整体的最优决策路径上。 ● (6)第四次计算结点为A,决策输出结点可 能为B1,B2,B3。同理可得决策路径为 ● A:AB2,费用5+14=19,路径 A+B2+C1+D1+E。 ● 此时才正式确定每个子问题的结点中,哪一 个结点将在最优费用的路径上。19将是最短 路径的结果 ● 显然这种计算方法,符合最优原理。 ● 子问题的决策中,只对同一城市(结点)比 较优劣。而同一阶段的城市(结点)的优劣 要由下一个阶段去决定。
数塔
● 如下图所示的数塔,从顶部出发,在每一结点可以选择向左下走或是 向右下走,一直走到底层,要求找出一条路径,使路径上的数的和最 大。数塔层数用n表示,1<=n<=100。 ● 【分析】对于这一问题,很容易想到用枚举的方法(深度搜索法)去 解决,即列举出所有路径并记录每一条路径所经过的数字总和。然后 寻找最大的数字总和,这一想法很直观,很容易编程实现。 ● 但是当行数很大时,当三角形的行数等于100时,其枚举量之大是可 想而知的,用枚举法肯定超时,甚至根本不能得到计算结果,必须用 动态规划法来解。
动态规划适合解决什么样的问题
● 准确地说,动态规划不是万能的,它只适于解决一定条件的最优策略 问题。 ● (1)状态必须满足最优化原理; (2)状态必须满足无后效性 ● 1、动态规划的最优化原理是指无论过去的状态和决策如何,对前面 的决策所形成的当前状态而言,余下的诸决策必须构成最优策略。 ● 可以通俗地理解为子问题的局部最优将导致整个问题的全局最优在上 例最短路径问题中,A到E的最优路径上的任一点到终点E的路径也必 然是该点到终点E的一条最优路径,满足最优化原理。 ● 动态规划的无后效性原则指某阶段的状态一旦确定,则此后过程的演 变不再受此前各状态及决策的影响。也就是说,“未来与过去无关”, 当前的状态是此前历史的一个完整总结,此前的历史只能通过当前的 状态去影响过程未来的演变。具体地说,如果一个问题被划分各个阶 段之后,阶段 I 中的状态只能由阶段 I+1 中的状态通过状态转移方程 得来,与其他状态没有关系,特别是与未发生的状态没有关系,这就 是无后效性。
历届动态规划题
题三加分二叉树(2003)【问题描述】设一个n个节点的二叉树tree的中序遍历为(l,2,3,…,n),其中数字1,2,3,…,n为节点编号。
每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下: subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数若某个子树为空,规定其加分为1,叶子的加分就是叶节点本身的分数。
不考虑它的空子树。
试求一棵符合中序遍历为(1,2,3,…,n)且加分最高的二叉树tree。
要求输出;(1)tree的最高加分(2)tree的前序遍历【输入格式】第1行:一个整数n(n<30),为节点个数。
第2行:n个用空格隔开的整数,为每个节点的分数(分数<100)。
【输出格式】第1行:一个整数,为最高加分(结果不会超过4,000,000,000)。
第2行:n个用空格隔开的整数,为该树的前序遍历。
【输入样例】55 7 1 2 10【输出样例】1453 1 24 5[分析]很显然,本题适合用动态规划来解。
如果用数组value[i,j]表示从节点i到节点j 所组成的二叉树的最大加分,则动态方程可以表示如下:value[i,j]=max{value[i,i]+value[i+1,j],value[i+1,i+1]+value[i,i]*value[i+2,j], value[i+2,i+2]+value[i,i+1]*value[i+3,j],…,value[j-1,j-1]+value[i,j-2]*value[j ,j], value[j,j]+value[i,j-1]}题目还要求输出最大加分树的前序遍历序列,因此必须在计算过程中记下从节点i到节点j 所组成的最大加分二叉树的根节点,用数组root[i,j]表示[PASCAL源程序]{$N+}program NOIP2003_3_Tree;constmaxn=30;vari,j,n,d:byte;a:array[1..maxn]of byte;value:array[1..maxn,1..maxn]of comp;root:array[1..maxn,1..maxn]of byte;s,temp:comp;f1,f2:text;fn1,fn2,fileNo:string;procedure preorder(p1,p2:byte);{按前序遍历输出最大加分二叉树}beginif p2>=p1 then beginwrite(f2,root[p1,p2],' ');preorder(p1,root[p1,p2]-1);preorder(root[p1,p2]+1,p2);end;end;beginwrite('Input fileNo:');readln(fileNo);fn1:='tree.in'+fileNo;fn2:='tree.ou'+fileNo;assign(f1,fn1);reset(f1);assign(f2,fn2);rewrite(f2);readln(f1,n);for i:=1 to n do read(f1,a[i]);close(f1);fillchar(value,sizeof(value),0);for i:=1 to n do beginvalue[i,i]:=a[i];{计算单个节点构成的二叉树的加分}root[i,i]:=i;{记录单个节点构成的二叉树的根节点}end;for i:=1 to n-1 do beginvalue[i,i+1]:=a[i]+a[i+1];{计算相邻两个节点构成的二叉树的最大加分}root[i,i+1]:=i;{记录相邻两个节点构成的二叉树的根节点;需要说明的是,两个节点构成的二叉树,其根节点可以是其中的任何一个;这里选编号小的为根节点,则编号大的为其右子树;若选编号大的为根节点,则编号小的为其左子树;因此,最后输出的前序遍历结果会有部分不同,但同样是正确的。
算法复习题(精炼版)
填空题动态规划算法的基本要素为:最优子结构性质与重叠子问题性质1)算法分析中,记号O表示渐进上界,记号Ω表示渐进下界,记号Θ表示紧渐进界。
2)回溯法在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。
3)分支限界法在问题的解空间树中,按广度优先策略,从根结点出发搜索解空间树。
所谓贪心选择性质是指(所求问题的整体最优解可以通过一系列局部最优的选择,即贪心选择来达到)。
所谓最优子结构性质是指(问题的最优解包含了其子问题的最优解)。
回溯法是指(具有限界函数的深度优先生成法)。
回溯法的算法框架按照问题的解空间一般分为(子集树)算法框架与(排列树)算法框架。
4)二分搜索算法是利用分治策略实现的算法。
5)衡量一个算法好坏的标准是时间复杂度低6)最长公共子序列算法利用的算法是动态规划法7)Strassen矩阵乘法是利用分治策略实现的算法8)回溯法搜索状态空间树是按照深度优先遍历的顺序。
9)算法中通常以自底向下的方式求解最优解的是动态规划法10)背包问题的贪心算法所需的计算时间为O(nlogn)11)0-1背包问题的回溯算法所需的计算时间为O(n2n)12)用动态规划算法解决最大字段和问题,其时间复杂性为n13)一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_有穷性,确定性,可行性,输入,输出。
1.算法的复杂性有时间复杂性和空间复杂性之分。
2、程序是算法用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
4.矩阵连乘问题的算法可由动态规划设计实现。
6、算法是指解决问题的一种方法或一个过程。
7、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法。
8、问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。
9、以深度优先方式系统搜索问题解的算法称为回溯法。
10、数值概率算法常用于数值问题的求解。
动态规划复习题
动态规划复习题在计算机科学和数学领域中,动态规划是一种非常重要的算法思想和解题策略。
它常常被用于解决那些具有重叠子问题和最优子结构性质的问题,能够有效地降低计算复杂度,提高算法的效率。
动态规划的核心思想是将一个复杂的问题分解成若干个子问题,并通过保存子问题的解来避免重复计算,从而逐步求解出原问题的最优解。
这种方法的关键在于找出问题的最优子结构和状态转移方程。
让我们通过一个经典的例子来理解动态规划的基本概念。
假设有一个楼梯,我们需要从楼梯的底部走到顶部。
每次可以向上走 1 级或者 2 级台阶。
那么,请问走到第 n 级台阶共有多少种不同的走法?我们可以用动态规划的方法来解决这个问题。
首先,定义一个数组dp,其中 dpi 表示走到第 i 级台阶的不同走法数量。
对于第 1 级台阶,只有 1 种走法,即直接走上去,所以 dp1 = 1。
对于第 2 级台阶,可以一次走 2 级,也可以分两次每次走 1 级,所以 dp2 = 2。
对于第 i 级台阶(i > 2),它可以从第 i 1 级台阶走 1 级到达,也可以从第 i 2 级台阶走 2 级到达。
所以,走到第 i 级台阶的走法数量等于走到第 i 1 级台阶的走法数量加上走到第 i 2 级台阶的走法数量,即dpi = dpi 1 + dpi 2。
通过这种方式,我们可以从第 1 级和第 2 级台阶的基础情况出发,逐步计算出 dpn,即走到第 n 级台阶的不同走法数量。
另一个常见的动态规划问题是背包问题。
假设有一个背包,它的容量为 C,有 n 个物品,每个物品有自己的重量 wi和价值 vi。
我们需要选择一些物品放入背包,使得背包中物品的总价值最大。
同样地,我们可以定义一个二维数组 dp,其中 dpij 表示在前 i 个物品中,背包容量为 j 时能够获得的最大价值。
对于第 1 个物品,如果背包容量足够容纳它,那么 dp1j = v1(j >= w1),否则 dp1j = 0。
【题解】bzoj1597:[Usaco2008Mar]土地购买(动态规划+斜率优化)
【题解】bzoj1597:[Usaco2008Mar]⼟地购买(动态规划+斜率优化)Solution:线性DP打牌\(+\)斜率优化定义状态:\(dp[i]\)到了位置\(i\)最少花费⾸先我们要发现,如果有⼀个⼩⽅块能被其他的⼤⽅块包围,其实可以忽略这个⼩⽅块,因为我们可以把他们俩捆绑,⼩⽅块的边长不会对求值造成贡献然后我们可以按照宽从⼤到⼩排序,长从⼩到⼤(剔除了那种包含的情况),保证单调性我们就可以列出递推式⼦:\(dp[i]=min(dp[j-1]+y[j]*x[i])\)注意是\(dp[j-1]\)(这⾥搞错了好久)显然这个是满⾜决策单调性的嘛(主要是我不会证明)然后我们就可玩弄这个式⼦,假定\(j<k\),那么\(y[j]>y[k]\),\(dp[j-1]<dp[k-1]\),且\(x[i]\)单调增\[dp[j-1]+y[j]*x[i]>dp[k-1]+y[k]*x[i] \]\[dp[j-1]-dp[k-1]>-(y[j]-y[k])*x[i] \]\[\frac{dp[j-1]-dp[k-1]}{y[j]-y[k]}>-x[i] \]然后维护⼀个上凸包就ok了Code://It is coded by Ning_Mew on 5.22#include<bits/stdc++.h>#define LL long longusing namespace std;const int maxn=5e5+7;int n;struct Node{LL x,y;}node[maxn];LL dp[maxn],large=-10000;int team[maxn],s=0,t=1;LL Min(LL a,LL b){return a<b?a:b;}bool cmp(const Node &a,const Node &b){if(a.y!=b.y)return a.y>b.y;return a.x>b.x;}double slope(int i,int j){return 1.0*(dp[i-1]-dp[j-1])/(node[i].y-node[j].y);}int main(){freopen("in.in","r",stdin);scanf("%d",&n);for(int i=1;i<=n;i++){scanf("%lld%lld",&node[i].x,&node[i].y);}sort(node+1,node+n+1,cmp);s=1;t=2;team[s]=1;dp[1]=node[1].x*node[1].y;large=node[1].x;for(int i=2;i<=n;i++){if(node[i].x<=large){dp[i]=dp[i-1];continue;}large=max(large,node[i].x);while((s+1<t)&&(slope(team[s],team[s+1])>-1.0*node[i].x)){s++;}dp[i]=Min(node[i].x*node[i].y+dp[i-1],dp[ team[s]-1 ]+node[ team[s] ].y*node[i].x);while((s+1<t)&&(slope(team[t-1],i)>slope(team[t-2],team[t-1]))){t--;}team[t]=i;t++;}printf("%lld\n",dp[n]);return 0;}。
动态规划 练习题
23.(11分)请用动态规划逆序求解法求解下列问题:求出下图中从A到E的最短路线及长度。
在图中标出每个点到终点的最短距离。
24. (11分)一个旅行者从A点出发,经过B、C、D等处,到达E。
各地间距离如图中所示。
问该旅行者应选择哪一条路线,使从A到E的总路程最短?(可直接在图上标号,最后给定答案)
24.一个旅行者从A点出发,经过B、C、D等处,到达E。
各地间距离如图中所示。
问该旅行者应选择哪一条路线,使从A到E的总路程最短?(可直接在图上标号,最后给定答案)(11分)
解:此为动态规划之“最短路问题”,可用逆向追踪“图上标号法”解决如下:
最佳策略为:A →B 2→C 1→D 1→E 或A →B 3→C 1→D 1→E 此时从A 到E 的总路程的最短距离都是11
23. 请用动态规划逆序求解法求解下列问题:
各点标号依次为:A:8, B1:7,B2:6, B3:8, C1:5, C2:4,D1:3,D2:1,D3:5.
25. 某厂生产C B A ,,三种产品,其所需劳动力、材料等有关数据见下表。
要求:建立模型,并用单纯形法计算,确定获利最大的产品生产计划。
解:(1)设C B A ,,
各生产321,,x x x 件。
有
32143min x x x z ++=
st.⎪⎩⎪
⎨⎧=≥≤++≤++)3,2,1(,03054345
536321321j x x x x x x x j
(4分)
获利最大的生产计划是C B A ,,各生产5件、0件、3件,最大利润为273453=⨯+⨯=z 元。
(15分)。
动态规划算法详解及经典例题
动态规划算法详解及经典例题⼀、基本概念(1)⼀种使⽤多阶段决策过程最优的通⽤⽅法。
(2)动态规划过程是:每次决策依赖于当前状态,⼜随即引起状态的转移。
⼀个决策序列就是在变化的状态中产⽣出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。
假设问题是由交叠的⼦问题所构成,我们就能够⽤动态规划技术来解决它。
⼀般来说,这种⼦问题出⾃对给定问题求解的递推关系中,这个递推关系包括了同样问题的更⼩⼦问题的解。
动态规划法建议,与其对交叠⼦问题⼀次重新的求解,不如把每⼀个较⼩⼦问题仅仅求解⼀次并把结果记录在表中(动态规划也是空间换时间的)。
这样就能够从表中得到原始问题的解。
(3)动态规划经常常使⽤于解决最优化问题,这些问题多表现为多阶段决策。
关于多阶段决策:在实际中,⼈们经常遇到这样⼀类决策问题,即因为过程的特殊性,能够将决策的全过程根据时间或空间划分若⼲个联系的阶段。
⽽在各阶段中。
⼈们都须要作出⽅案的选择。
我们称之为决策。
⽽且当⼀个阶段的决策之后,经常影响到下⼀个阶段的决策,从⽽影响整个过程的活动。
这样,各个阶段所确定的决策就构成⼀个决策序列,常称之为策略。
因为各个阶段可供选择的决策往往不⽌⼀个。
因⽽就可能有很多决策以供选择,这些可供选择的策略构成⼀个集合,我们称之为同意策略集合(简称策略集合)。
每⼀个策略都对应地确定⼀种活动的效果。
我们假定这个效果能够⽤数量来衡量。
因为不同的策略经常导致不同的效果,因此,怎样在同意策略集合中选择⼀个策略,使其在预定的标准下达到最好的效果。
经常是⼈们所关⼼的问题。
我们称这种策略为最优策略,这类问题就称为多阶段决策问题。
(4)多阶段决策问题举例:机器负荷分配问题某种机器能够在⾼低两种不同的负荷下进⾏⽣产。
在⾼负荷下⽣产时。
产品的年产量g和投⼊⽣产的机器数量x的关系为g=g(x),这时的年完善率为a,即假设年初完善机器数为x,到年终时完善的机器数为a*x(0<a<1);在低负荷下⽣产时,产品的年产量h和投⼊⽣产的机器数量y的关系为h=h(y)。
第9章 第4节 动态规划经典题(C++版)
【参考程序1】 #include<cstdio> int max(int a,int b){return a>b?a:b;} int a[51][51]; int sum[51][51][51][51]; int n,i,j,h,k,x,y,z; int main() { scanf("%d%d%d%d",&n,&x,&y,&z); while(x && y && z) //C++中大于0的正整数都看作true,只有0看作false { a[x][y]=z; scanf("%d%d%d",&x,&y,&z); } for (i=1; i<=n; i++) for (j=1; j<=n; j++) for (h=1; h<=n; h++) for (k=1; k<=n; k++) { int tmp1=max(sum[i-1][j][h-1][k],sum[i][j-1][h][k-1]); int tmp2=max(sum[i-1][j][h][k-1],sum[i][j-1][h-1][k]); sum[i][j][h][k]=max(tmp1,tmp2)+a[i][j]; if (i!=h && j!=k) sum[i][j][h][k]+=a[h][k]; } printf("%d\n",sum[n][n][n][n]); return 0; }
动态规划讲解大全(含例题及答案)
多阶段决策过程的最优化问题。 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在 它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不 是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个 决策序列,因而也就确定了整个过程的一条活动路线,如图所示:(看词条图) 这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问 题就称为多阶段决策问题。
在前面的例子中,第一个阶段就是点 A,而第二个阶段就是点 A 到点 B,第三个阶段是点 B 到点 C,而第四个阶段是点 C 到点 D。
状态:状态表示每个阶段开始面临的自然状况或客观条件,它不以人们的主观意志为转移,也称 为不可控因素。在上面的例子中状态就是某阶段的出发位置,它既是该阶段某路的起点,同时又是前 一阶段某支路的终点。
fout.close(); return 0; }
USACO 2.3 Longest Prefix
题目如下: 在生物学中,一些生物的结构是用包含其要素的大写字母序列来表示的。生物学家对于把长的序 列分解成较短的(称之为元素的)序列很感兴趣。 如果一个集合 P 中的元素可以通过串联(允许重复;串联,相当于 Pascal 中的 “+” 运算符) 组成一个序列 S ,那么我们认为序列 S 可以分解为 P 中的元素。并不是所有的元素都必须出现。 举个例子,序列 ABABACABAAB 可以分解为下面集合中的元素: {A, AB, BA, CA, BBC} 序列 S 的前面 K 个字符称作 S 中长度为 K 的前缀。设计一个程序,输入一个元素集合以及一 个大写字母序列,计算这个序列最长的前缀的长度。 PROGRAM NAME: prefix INPUT FORMAT 输入数据的开头包括 1..200 个元素(长度为 1..10 )组成的集合,用连续的以空格分开的字 符串表示。字母全部是大写,数据可能不止一行。元素集合结束的标志是一个只包含一个 “.” 的行。 集合中的元素没有重复。接着是大写字母序列 S ,长度为 1..200,000 ,用一行或者多行的字符串 来表示,每行不超过 76 个字符。换行符并不是序列 S 的一部分。 SAMPLE INPUT (file prefix.in) A AB BA CA BBC . ABABACABAABC OUTPUT FORMAT 只有一行,输出一个整数,表示 S 能够分解成 P 中元素的最长前缀的长度。 SAMPLE OUTPUT (file prefix.out) 11 示例程序如下: #include <stdio.h>
经典的动态规划入门练习题
动态规划入门练习题1.石子合并在一个圆形操场的四周摆放着N堆石子(N<= 100),现要将石子有次序地合并成一堆.规定每次只能选取相邻的两堆合并成新的一堆,并将新的一堆的石子数,记为该次合并的得分.编一程序,由文件读入堆栈数N及每堆栈的石子数(<=20).(1)选择一种合并石子的方案,使用权得做N-1次合并,得分的总和最小;(2)选择一种合并石子的方案,使用权得做N-1次合并,得分的总和最大;输入数据:第一行为石子堆数N;第二行为每堆的石子数,每两个数之间用一个空格分隔.输出数据:从第一至第N行为得分最小的合并方案.第N+1行是空行.从第N+2行到第2N+1行是得分最大合并方案.每种合并方案用N行表示,其中第i行(1<=i<=N)表示第i次合并前各堆的石子数(依顺时针次序输出,哪一堆先输出均可).要求将待合并的两堆石子数以相应的负数表示.输入输出范例:输入:44 5 9 4输出:-459-4-8-59-13-9224-5-944-14-4-4-1822最小代价子母树设有一排数,共n个,例如:22 14 7 13 26 15 11.任意2个相邻的数可以进行归并,归并的代价为该两个数的和,经过不断的归并,最后归为一堆,而全部归并代价的和称为总代价,给出一种归并算法,使总代价为最小.输入、输出数据格式与“石子合并”相同。
输入样例:412 5 16 4输出样例:-12-516417-16-4-17-20372.背包问题设有n种物品,每种物品有一个重量及一个价值。
但每种物品的数量是无限的,同时有一个背包,最大载重量为XK,今从n种物品中选取若干件(同一种物品可以多次选取),使其重量的和小于等于XK,而价值的和为最大。
输入数据:第一行两个数:物品总数N,背包载重量XK;两个数用空格分隔;第二行N个数,为N种物品重量;两个数用空格分隔;第三行N个数,为N种物品价值; 两个数用空格分隔;输出数据:第一行总价值;以下N行,每行两个数,分别为选取物品的编号及数量;输入样例:4 102 3 4 71 3 5 9输出样例:122 14 13.商店购物某商店中每种商品都有一个价格。
动态规划(完整)
(3) 决策、决策变量
所谓决策就是确定系统过程发展的方案,
决策的实质是关于状态的选择,是决策者
从给定阶段状态出发对下一阶段状态作出
的选择。
用以描述决策变化的量称之决策变量, 和状态变量一样,决策变量可以用一个数, 一组数或一向量来描述.也可以是状态变量
的函数,记以 xk xk (sk ) ,表示于 k 阶段状
动态规划的分类:
• 离散确定型 • 离散随机型 • 连续确定型 • 连续随机型
动态规划的特点:
• 动态规划没有准确的数学表达式和定义 精确的算法, 它强调具体问题具体分析,
依赖分析者的经验和技巧。
• 与运筹学其他方法有很好的互补关系, 尤 其在处理非线性、离散性问题时有其独 到的特点。
通常多阶段决策过程的发展是通过状态的一系列变换来 实现的。一般情况下,系统在某个阶段的状态转移除与本阶 段的状态和决策有关外,还可能与系统过去经历的状态和决 策有关。因此,问题的求解就比较困难复杂。而适合于用动 态规划方法求解的只是一类特殊的多阶段决策问题,即具有 “无后效性”的多阶段决策过程。
4 6
C1
3
B2 3
4T
3 3
C2
阶段指标函数:
vk sk , xk cskxk
5
A3
B3
过程指标(阶段递推)函数:
fk(sk ) min
vk (sk , xk )
fk
1
(sk
1 )
k= 4
f4 (C1) = 3, f4 (C2) = 4
2
k=3
f3(B1)=min{1+f4(C1)=4*, 4+f4(C2)=8}=4
(6) 指标函数
用来衡量策略或子策略或决策的效果的 某种数量指标,就称为指标函数。它是定义 在全过程或各子过程或各阶段上的确定数量 函数。对不同问题,指标函数可以是诸如费 用、成本、产值、利润、产量、耗量、距离、 时间、效用,等等。
算法基础2008年考题
(装订线内不要答题)(考试时间 150 分钟)一、单项选择题(本大题共15小题,每小题1分,共15分)1、通常一个程序对应一个算法,说一个操作系统不是算法,是因为[ ]A、操作系统执行结果不确定。
B、操作系统太复杂。
C、操作系统经常被扩充。
D、操作系统正常运行时不终止。
2、一个算法具有多个特性,其中算法的正确性是指:[ ]A、计算机按算法指定的操作步骤顺序执行,能在执行有限步骤后给出结果。
B、正确的算法要求组成算法的规则和步骤的意义唯一确定,没有二义性。
C、能对有效的输入,总能在有限的时间内给出正确的输出。
D、同时指A和B两个方面。
3、某算法希望通过进栈和退栈操作得到所有可能的退栈序列。
如果3次进栈操作依次将整数1、2和3进栈,只要栈非空,可以执行退栈操作;只要还有整数可进栈,也可以执行进栈操作。
这样,因进栈操作和退栈操作所有可能的不同顺序,就可得到所有可能的整数1、2、3退栈序列,不同的退栈序列的个数为[ ]A、4B、5C、6D、74、以下函数的功能[ ]int* f(int a[], int n, int key){if(n == 0) return NULL;if(a[0] == key) return a;return f(a+1, n-1, key);}A、是在数组a[]的前n个元素中找值key。
B、是返回NULL(n=0),或a(a[0]=key)。
C、不确定,因为该函数有错误。
D、是在数组a[]的前n个元素中找值等于key的元素的指针。
5、在以下序列中,可以看作是一个堆的是A、9、6、4、2、8、1、3B、9、8、4、2、3、6、1C、9、8、4、2、6、3、1D、9、4、8、1、6、3、26、下列排序算法都要对排序数列作多趟处理,才能完成排序要求,其中每趟处理后使数列中的有序段个数成倍减少,而有序段的元素个数成倍增加排序算法是[ ] A、shell排序B、堆排序C、快速排序D、归并排序7、对整数序列25, 34, 58, 12, 19, 50,18作从小到大排序,经排序算法一趟处理后,序列变成50,12,34,25,58,18,19。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第八章动态规划动态规划模型和求解方法(1)阶段.(2)状态.描述过程在第k阶段状态的变量,称为状态变量,用s k表示.s k取值的全体记作S k,称作第k阶段的状态集合.状态的定义在动态规划中往往是最重要的概念.它必须具备3个特性:①描述性.各阶段状态的演变能描述决策过程.②无后效性.如果第k阶段的状态给定,则在这阶段以后过程的发展不受这阶段以前各个阶段状态的影响.也就是说,过程未来的发展,只与过程的现在状态有关,而与过程的过去状态无关.③阶段状态变量的取值,直接或间接是可知的,也就是说,第k阶段的状态集合S k是给定的.(3)决策.当第k阶段的状态s k给定后,从该状态演变为第k+1阶段状态时所作的选择称为决策.描述决策的变量称为决策变量,用x k(s k)表示,简记为x k.x k(s k)取值的全体记为D k(s k),称为第k阶段的决策集合,s k取值不同,相应的决策集合也可能不同.(4)策略.{ x1(s1),x2(s2)…,x N(s N)}称为策略.(5)状态转移方程.第k+1阶段的状态s k+l 与第k阶段的状态s k、决策x k之间有函数关系s k+l =T k (s k,x k),并称其为状态转移方程.(6)权函数.在第k阶段,当状态取定s k、决策取定x k时,该阶段所实现的效益指标(例如距离、时耗、利润、成本等)称为权函数,(7)指标函数.若第k阶段的状态为s k,当采用了最优子策略{ x*k,x*k+1,…,x*N}后,从阶段k到阶段N可获得的效益,称为指标函数,记为f k (s k).实现f k (s k) 值的x k记为x*k.(8)递归方程.称下列方程为递归方程:f N+1 (s N+1) =0或1,f k(s k)=)}()(),({11)(++∈⨯+kkkkkSDxsfxswoptKK,k=N,N一1, (1)其中,符号opt视问题性质可取面min或max,同时,当符号⊙取加法运算时,取f N+1 (s N+1) =0;当符号⊙取乘法运算时,取f N+1 (s N+1) =1.由于用递归方程和状态转移方程求解动态规划的过程,是由第N阶段向前递归至第1阶段,故这种方法称为逆序解法.综上所述,如果一个问题能用动态规划方法求解,那么,我们可以按下列步骤建立动态规划的数学模型:①划分阶段,并正确地定义各阶段状态变量使之具有描述性、无后效性和可知性3个特性,同时确定状态集合;②定义决策变量,确定决策集合:③确定权函数;④建立状态转移方程;⑤确定指标函数;⑥建立递归方程.由状态转移方程和递归方程,用逆序解法对动态规划模型求解,在求得,f1(s1)和x*1后,则按顺序追踪方法寻找最优策略。
例8-2(投资问题)现有资金5百万元,可对3个项目进行投资,投资额均为整数(单位为百万元).假设2#项目的投资不得超过3百万元,1#和3#项目的投资均不得超过4百万元,3#项目至少要投资1百万元.投资5年后每个项目预计可获得的收益由下表给出。
问如何投资可获得最大的收益.解:本问题是一个静态问题,但可以把它转化成动态问题:将这个投资问题分成3个阶段,在第k阶段要对项目k#进行投资决策.令s k——对k#,…,3#项目允许的投资额;x k——对k#项目的投资额;w(s k,x k)——对k#项目投资x k后的收益:w(s k,x k)= w k(x k);T k (s k,x k)——s k+l= s k - x k;f k (s k )——当第k 至第3项目允许的投资额为s k 时所能获得的最大收益.为了获得最大收益,必须将5百万元资金全部用于投资.故假想有第4阶段存在时必有s 4= 0.对于本问题,有下列递归方程:{}4411()()0()max ()(),3,2,1k k k k kk k k k x D s f s f s w x f s k ++∈=⎧⎪⎨=+=⎪⎩第一步 K=3第二步K=2第三步K=1s1=5 s2=4 s3=2 x1*=1 x2*=2 x3*=2 f1(5)=21(最优分配问题)有一个仪表公司打算向它的3个营业区设立6家销售店。
每个营业区至少设一家,所获利润如表。
问设立的6家销售店数应如何分配,可使总利润最大?解:s k——对k#,…,3#营业区允许设立的销售店数x k——对k#营业区设立的销售店数w k (s k,x k)——对k#营业区设立x k销售店后的利润:w k (s k,,x k)= w k (x k)T k (s k, x k)——s k +1= s k - x kf k(s k)——当第k至第3个营业区允许设立的销售店数为s k时所能获得的最大利润递归方程:f4(s4)=0f k (s k)=max {w k (x k)+ f k+1(s k+1)}, k=3,2,1x k↔D k(s k)第一步:k=3时,有方程f4 (s4)=0f3(s3)= max {w3(x3)+ f4(s4) }x3↔D3(s3)s3=s2—x2第二步:k=2,有方程f2(s2)= max {w2(x2)+ f3(s3) }x2↔D2(s2)s3=s2—x2-第三步:k=1,有方程f1(s1)= max {w1(x1)+ f2(s2) }x1↔D1(s1)s2=s1—x1s1=6 →s2=3 →s3=2↓↓↓x1*=3 x2*=1 x3*=2分别A1、A2、A3营业区设立3家、1家、2家销售店,最大利润为770例8-7(可靠性问题)某种仪表由3种不同的元件串联而成,任一个元件的故障将造成整台仪表的故障.每种元件又都有3种规格,设k#元件j#规格的可靠性为R kj,所需费用为C kj.生产每台仪表的费用限额E为10.试问如何选用各种元件的规格,使得仪表的可靠性最大?我们把这个问题分成3个阶段.在第k阶段要确定k#元件的规格.下面我们用逆序解法求解.s k——仪表上配备k #,…,3#元件时允许使用的费用;s3——仪表上配备3#元件时允许使用的费用;s2——仪表上配备2#, 3#元件时允许使用的费用;s1——仪表上配备1 #,2 #,3#元件时允许使用的费用;x k——k#元件所选用的规格;w k(s k,x k)——k#元件采用规格x k#时的可靠性:w k(s k,x k)=R k x k;T k (s k,x k)——s k+l= s k - C k x k;f k(s k)——在费用限额为s k的条件下,k #, (3)元件串联时相应部分可获得的最大可靠性.递归方程为:f4(s4)=1f k(s k)=)}(),({11)(m ax++∈∙kkkkkSDxsfxswKK,k=3,2,,1。
第一步,k=3,将上表简化:第二步,k=2,f(s2)的计算过程如表所示.将上表简化:第三步,对k=1S1=10 →S2=5 →S3=5 ↓↓↓x*1=3 x*2=1 x*3=2请用动态规划方法求解:max f = x1x2x3s.t.a1x1+ a2x2+a3x3=x1 + 2x2+ x3≤5x1>0,x2>0,x3>0,整数。
设s k:a k x k+---+a3x3的允许值x k:第k阶段x k的取值w k(s k,x k):w k(s k,x k)= x kT k (s k,x k):s k+1=s k-a k x kF k(s k):在a k x k+---+a3x3≤s k的条件下,x k---x3能获得的最大值递归方程f4(s4)=1f k(s k)= Max{ x k·f(s k+1) } k=3,2,1 第一步:第二步:第三步:(2分)123123123123T T5421,1,25312,1,1X*112X*211*2s s s x x x s s s x x x f ******∴=→=→=⇒====→=→=⇒===∴或最优解=(,,)或=(,,)=二、加工某产品分别要通过1#、2#、3#三种机器,这些机器的偶然故障,将会影响产品的质量。
但是次品要在生产过程终了时才能检查发觉。
由统计资料知道,这三种机器加工产品的合格率分别为0.7, 0.6, 0.8。
现在管理部门准备再投资5万元来提高产品的合格率。
问如何使用这5万元,使产品合格率最高?解:s k——对k#,…,3#机器允许的投资额;x k——对k#机器的投资额;w(s k,x k)——对k#机器投资x k后的收益:w(s k,x k)= w k(x k);T k (s k,x k)——s k+l= s k - x k;f k (s k )——当第k #至第3#机器允许的投资额为s k 时所能获得的最大收益.递归方程:{}4411()()1()max ()(),3,2,1k k k k k k k k k x D s f s f s w x f s k ++∈=⎧⎪⎨=∙=⎪⎩第一步:k=3第二步:k=2第三步:k=10.567 0.612 0.612 0.552S1=5 →S2=4 →S3=1↓↓↓x*1=1 x*2=3 x*3=1S1=5 →S2=3 →S3=0↓↓↓x*1=2 x*2=3 x*3=0。