最新noip动态规划讲解
动态规划(dynamic programming)是运筹学 的一个分支,是求解决策过程最优化的数学方法。 动态规划算法把多阶段过程转化为一系列单阶段 问题,利用各阶段之间的关系,逐个求解,以得 到全局最优策略。
动态规划是信息学竞赛中选手必须熟练掌 握的一种算法,它以其多元性广受出题者的喜爱。 近年来,动态规划几乎每次都出现在NOIp的赛 场上,而且还有越来越多的趋势。因此,掌握基 本的NOIp动态规划题是至关重要的。
如果你一看到这道题目就想到搜索,那么
这道题目就是搜索。那么为什么它出现在动态规划 的专题中的?是因为……
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数), 计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种 导弹拦截系统。
样例: INPUT 389 207 155 300 299 170 158 65
统数)
OUTPUT 6(最多能拦截的导弹数) 2(要拦截所有导弹最少要配备的系
例如,N=3,K=2,如果面值分别为1分、4分,则在1分~6分之间的每 一个邮资值都能得到(当然还有8分、9分和12分);如果面值分别为1分、 3分,则在1分~7分之间的每一个邮资值都能得到。可以验证当N=3,K=2 时,7分就是可以得到的连续的邮资最大值,所以MAX=7,面值分别为1分、 3分。
【样例】 INPUT N=3 K=2 OUTPUT 13 MAX=7
10
If j+s[i,2,1]<=m Then
If Ff+s[i,2,2]>f[j+s[i,2,1]] Then f[j+s[i,2,1]]:=Ff+s[i,2,2];
11
If j+s[i,1,1]+s[i,2,1]<=m Then
If Ff+s[i,1,2]+s[i,2,2]>f[j+s[i,1,1]+s[i,2,1]] Then
f[j+s[i,1,1]+s[i,2,1]]:=Ff+s[i,1,2]+s[i,2,2];
End;
End;
Sample Problem5
邮票面值设计(NOIp1999)
给定一个信封,最多只允许粘贴N张邮票,计算在给定K(N+K≤40) 种邮票的情况下(假定所有的邮票数量都足够),如何设计邮票的面值, 能得到最大值MAX,使在1~MAX之间的每一个邮资值都能得到。
Begin
00
If f[j-a[i]]+b[i]>f[j] Then f[j]:=f[j-a[i]]+b[i];
Ff:=f[j-a[i]]+b[i];
01
If j+s[i,1,1]<=m Then
If Ff+s[i,1,2]>f[j+s[i,1,1]] Then f[j+s[i,1,1]]:=Ff+s[i,1,2];
For i:=1 To n Do
For j:=Max Downto a[i] Do (a[i] To Max)
If f[j]<f[j-a[i]]+b[i] Then f[j]:=f[j-a[i]]+b[i];
Sample Problem4
金明的预算方案(NOIp2006)
【问题描述】
金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己 专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购 买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明 就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个 主件的。如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件 可以有0个、1个或2个附件。附件不再有从属于自己的附件。金明想买的东西很 多,肯定会超过妈妈限定的N元。于是,他把每件物品规定了一个重要度,分为 5等:用整数1~5表示,第5等最重要。他还从因特网上查到了每件物品的价格 (都是10元的整数倍)。他希望在不超过N元(可以等于N元)的前提下,使每 件物品的价格与重要度的乘积的总和最大。
Sample Problem3
拦截导弹(NOIp1999)
某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦 截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发 炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统 还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。
望购买物品的个数。)从第2行到第m+1行,第j行给出了编号为j-1的物品的基 本数据,每行有3个非负整数v p q(其中v表示该物品的价格(v<10000),p表 示该物品的重要度(1~5),q表示该物品是主件还是附件。如果q=0,表示该 物品为主件,如果q>0,表示该物品为附件,q是所属主件的编号) 【输出文件】
只有一个正整数,为不超过总钱数的物品的价格与重要度乘积的总和的最 大值。【输入样例】
1000 5 800 2 0
400 5 1
0 5 1
400 3 0
500 2 0 【输出样例】
2200
For i:=1 To n Do
For j:=m Downto a[i] Do
If f[j-a[i]]>-1 then
设第j件物品的价格为v[j],重要度为w[j],共选中了k件物品,编号依次为j1, j2,……,jk,则所求的总和为:
v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中*为乘号) 请你帮助金明设计一个满足要求的购物单。
Sample Problem4
【输入文件】 第1行,为两个正整数N m(其中N(<32000)表示总钱数,m(<60)为希
反例: 9 8 7 1 10 6 5 4
9 8 7 1 10 6 5 4 1 10 10
9 8 7 1 10 6 5 4 10 6 5 4
01背包:有N件物品和一个容量为V的背包。第i件物品 的费用是c[i],价值是w[i]。求解将哪些物品装入背包 可使价值总和最大。
完全背包:有N种物品和一个容量为V的背包,每种物品 都有无限件可用。第i种物品的费用是c[i],价值是 w[i]。求解将哪些物品装入背包可使这些物品的费用总 和不超过背包容量,且价值总和最大。
动态规划例题讲解精品PPT课件
山东师大附中
Preview
本节课主要通过几道例题,总揽NOIp中较 常见的动态规划模型,不会过多涉及优化 内容。
Preview
最长上升子序列 内存碎片 背包问题 最长公共子序列 石子合并
括号序列 决斗 三取方格数 选课 贪吃的九头龙
最长上升子序列
给出一个数列{a1,a2,...,an},要求你选出尽量 多的元素,使这些元素按其相对位置单调
完全背包问题
共有N种物品,每种物品有一定的重量w[i] 和一定的价值v[i],每种物品有无限个。现 在我们有一个最大载重量limit的包,问放入 哪些物品能使得总价值最高?
w[i]和v[i]均为整数,N<=100,limit<=10000
完全背包问题
fillchar(f,sizeof(f),0); for i:=1 to n do for j:= w[i] to limit do f[j] = max(f[j], f[j-w[i]]+v[i]); writeln(f[limit]);
1400
共有3件物品 重量分别为30/80/10 价值分别为300/1200/200 背包最大载重量为100
0/1背包问题
令f[i,j]表示考虑完前i项物品,并且当前背包 承重不大于j的情况下能获得的最大价值
f[i,j]=max( f[i-1,j], //不选第i项物品 f[i-1,j–w[i]]+v[i]) //选择第i项物品
2
插入a6后 -inf
1
插入a7后 -inf
1
插入a8后 -inf
1
插入a9后 -inf
1
inf
inf
inf
8
CCF中学生计算机程序设计能力评级信息学奥赛NOIP动态规划算法及优化
动态规划算法 及优化
Codeforces 815C Karen and Supermarket
背包类问题 数据结构优化 决策单调性 计数
可以发现依赖关系形成了一棵树,因此可以考虑在树上
进行 DP。需要注意的是,本题中物品的价格可能非常大, 但是每个物品的收益只有 1,因此我们 DP 时第二维表示的 应当是买了多少个物品。
动态规划算法 及优化
背包类问题 数据结构优化 决策单调性 计数
动态规划算法及优化
动态规划算法 及优化
背包问题
背包类问题 数据结构优化 决策单调性 计数
01 背包:n 个物品,每个物品有价格 ci 及收益 wi ,问 m 元最多能得到多少收益。
完全背包:n 种物品,每种物品有价格 ci 及收益 wi,并 且每种物品能买无限个,问 m 元最多能得到多少收益。
n ≤ 500, m ≤ 4000, di ≤ 100。
动态规划算法 及优化
BZOJ4182 Shopping
背包类问题 数据结构优化 决策单调性 计数
先考虑我们知道必选某个节点时怎么做。可以把这个点
当成根,那么问题就转化为了一个树上依赖背包问题。 考虑用和上一题类似的方法进行 DP。令 fi,j 表示在节点
背包类问题 数据结构优化 决策单调性 计数
树上依赖背包其实还有一个经典的做法。考虑一边 dfs 一边 DP。dfs 到节点 i 的时候,我们先把 DP 数组拷贝一份, 表示不选 i 的子树时的背包。接着我们用多重背包的做法加 入商品 i,并且强制至少买一个商品 i。然后我们再依次 dfs 进每个儿子的子树中,回溯到 i 时我们就得到了在 i 的子树 中买了物品的背包,把它与原先拷贝的背包取个 max 即可。 这样复杂化即可。这样加入一个物品的复杂度是 O(m)
NOIP普及讲座4-动态规划2
经典例题讲解
【输入格式】 第一行为硬币总值total和硬币种类数n。 以下n行为数值a[i],i=1,2,3...n 【输出格式】 一行,解决方案数 【样例输入】 83 5 50 25 10 5 1 【样例输出】 159
经典例题讲解
【样例说明】 0 x 50
0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50 0 x 50
经典例题讲解
下面是一个例子 1 2 3 45 16 17 18 19 6 15 24 25 20 7 14 23 22 21 8 13 12 11 10 9 一个人可以从某个点不滑向上下左右相邻四个点之一,当且仅当高度减 小,在上面的例子中,一条可行的不滑坡为24-17-16-1(从24开始, 在1结束)。当然25-24-23-…-3-2-1更长。事实上,这是最长 的一条。 【输入格式】 第1行为表示区域的二维数组的行数R和列数C(1≤R,C≥100)。下面是
n<=30),每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
输入 第一行是一个整数V,表示箱子容量。 第二行是一个整数n,表示物品数。 接下来n行,每行一个正整数(不超过10000),分别表示这n个物品的各自
体积。 输出 一个整数,表示箱子剩余空间。
经典例题讲解
0 x 10
0 x 5 83 x 1 1 x 5 78 x 1 2 x 5 73 x 1 3 x 5 68 x 1 4 x 5 63 x 1 5 x 5 58 x 1 6 x 5 53 x 1 7 x 5 48 x 1 8 x 5 43 x 1 9 x 5 38 x 1 10 x 5 33 x 1 11 x 5 28 x 1 12 x 5 23 x 1 13 x 5 18 x 1
信息学奥赛——动态规划法专题
信息学奥赛——动态规划法专题全国青少年信息学奥林匹克联赛动态规划算法一、动态规划的定义在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。
因此各个阶段决策的选取不能任意确定,它依赖于当前面临的状态,又影响以后的发展。
当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线。
这种把一个问题看作是一个前后关联具有链状结构的多阶段过程(如图)就称为多阶段决策过程,这种问题称为多阶段决策问题。
在多阶段决策问题中,各个阶段采取的决策,一般来说是与时间有关的,决策依赖于当前状态,又随即引起状态的转移,一个决策序列就是在变化的状态中产生出来的,故有"动态"的含义,我们称这种解决多阶段决策最优化的过程为动态规划方法。
应指出,动态规划是考察求解多阶段决策问题的一种途径、一种方法,而不是一种特殊算法。
不像线性规划那样,具有一个标准的数学表达式和明确定义的一组规划。
因此我们在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。
二、动态规划最优化原理作为整个过程的最优策略具有这样的性质:即无论过去的状态和决策如何,对以前的决策所形成的状态而言,余下的诸决策必须构成最优策略。
(无论过程的初始状态/初始决策是什么,其余决策活动必须相对于初始决策所产生的状态构成一个最优决策序列,才可能使整个决策活动构成最优决策序列。
)简单地说,一个整体过程的最优策略的子策略一定是最优策略。
利用这个原理,可以把多阶段决策问题的求解过程看成是一个连续的逆推过程。
由后向前逐步推算。
在求解时,各种状态前面的状态和决策,对后面的子问题,只不过相当于其初始条件而己,不影晌后面过程的最优策略。
原理的证明可用反证法。
在此把它略去。
三、动态规划的求解方法是先把问题分成多个子问题(一般地每个子问题是互相关联和影响的),再依次研究逐个问题的决策。
动态规划总结汇总(NOIP必备)
动态规划(一)05B 张婕目录一、数字添加号 (2)二、乘积最大 (9)三、矩阵取数 (16)四、邮局(已修改) (22)五、棋盘分割 (28)六、矩阵连乘 (35)七、能量项链 (40)八、石子合并 (45)九、加分二叉树 (51)十、CUTTING(已修改) (56)1、数字添加号『题目描述』一个由数字1,2,... ,9组成的数字串(长度不超过200),问如何将M(M<=20)个加号("+")插入到这个数字串中,使所形成的算术表达式的值最小。
请编一个程序解决这个问题。
注意:加号不能加在数字串的最前面或最末尾,也不应有两个或两个以上的加号相邻。
M保证小于数字串的长度。
例如:数字串79846,若需要加入两个加号,则最佳方案为79+8+46,算术表达式的值133。
[输入格式]从键盘读入输入文件名。
数字串在输入文件的第一行行首(数字串中间无空格且不折行),M的值在输入文件的第二行行首。
[输出格式]在屏幕上输出所求得的最小和的精确值。
[输入输出举例]EXAM4.SAM823639837423EXAM4.SAM 2170『题意分析』1)任务:求在长度为n的数中添加m 个加号的最小值2)程序名 exam4.pas3)输入i.文件名 exam4.inii.格式及内容第一行数字串 n<=200(数字串中间无空格且不折行)第二行整数M m <= 20(所要添加的加号个数)4)输出i.文件名 exam4.outii.格式及内容所求得的最小和的精确值5)数据范围N <= 200, m <= 20注:□加号不能加在数字串的最前面或最末尾,也不应有两个或两个以上的加号相邻。
M保证小于数字串的长度。
『算法分析』1)根据样例模拟求解过程。
119191 2⎪⎪⎩⎪⎪⎨⎧=+=+=+=+=1391)1,5(19391)1,4(211191)1,3(91939191)1,2(139)2,6(f f f f f ⎪⎪⎩⎪⎪⎨⎧=+=+=+=+=12009)0,4(13819)0,3(930919)0,2(1901919)0,1(138)1,5(f f f f f ⎩⎨⎧=+=+==+=209)0,2(2019)0,1(20)1,3(21)0,1()1,2(f f f f f ⎪⎩⎪⎨⎧=+=+=+=1201)0,3(10291)0,2(192191)0,1(102)1,4(f f f f 2) 根据数据范围估算程序复杂度。
动态规划基础、进阶与优化
山东师大附中陈键飞前言自古以来就是NOIP的重要考察内容,在联赛中占的分量大。
对选手能力有一定要求,需要能够熟练地建立动态规划模型。
需要大量做题,初学者不易掌握其思想。
目录基础:基本概念背包问题——一类典型应用 进阶:更多的问题树形DP状态压缩优化:减少状态数目减少状态转移(决策)时间基本概念最长上升子序列状态:f[i]能完全地表示出问题某个或某些本质相同的形态决策:f[i]=min(f[j]+1)状态由哪个状态转移得到阶段:每个i前面的阶段决定后面的阶段,后面的阶段由前面的状态转移得到基本概念石子合并状态f[i,j]决策f[i,j]=min(f[i,k]+f[k+1,j])+w[i,j] 阶段j-i (区间大小)基本概念无后效性后面阶段的状态只受前面阶段的状态的影响 对于任意两个状态,只能单向的进行转移基本概念拓扑图(有向无环图)无后效性f[i]=min(f[j])+1基本概念 非拓扑图(可能有环) 有后效性a →b →c ?b →c →a ?a bc 51111基本概念最优子问题问题最优,只需子问题最优,与到达子问题的路径无关3 5 24 6f(5)最优,只需f(4)最优,与f(4)是怎么到达的无关与路线具体是3 4 6还是2 4 6无关基本概念最优子问题输出1~n中∑(A(i,p[i]))最大的排列f(i)表示用1~n组成的长度为i的序列? 与到达子问题的路径有关!1 4 3 →6 ?4 2 3 →6 ?基本概念无后效性、最优子问题是否能满足与状态的表示,状态的转移,阶段的划分有关背包问题——一类典型应用 给定n个货币,面值各不相同,问能否凑出m元钱f[i,j]表示前i个货币能否凑出j元f[i,j] = f[i-1,j] (不选j)or f[i-1,j-w[i]](选j)背包问题——一类典型应用 给定n种货币,每种无限多个,面值各不相同,问能否凑出m元钱f[i,j]表示前i种货币能否凑出j元f[i,j]=f[i-1,j] or f[i,j-w[i]]背包问题——一类典型应用 给定n种货币,第i种有A i个,面值W i,问能否凑出m 元钱将每种货币i拆成A i个价值为W i的货币O(m∑A i)将每种货币i拆成价值为W i,2W i,4W i,8W i……的货币O(m∑log A i)单调队列O(mn) ,暂时跳过背包问题——一类典型应用 给定n种货币分为k组,每组只能选一个,问能否凑出m元f[i,j,k]表示用前1~i-1组和第i组的前j个能否凑出k元。
noip动态规划1
➢ 例1 最短路径问题。下图中给出一个地图,地图中每个顶点代表 一个城市,两个城市之间的连线表示道路,连线上的数值代表道路 的长度。现在,想从城市A到城市E,怎样走路程最短,最短路程 的长度是多少?
➢ 现在,我们想从城市A到达城市E。怎样走才能使得路径最短,最 短路径的长度是多少?
fk ( s k )op g fk t 1 T k ( s k ,u k ) ,u k
u k D k ( s k )
fn(sn) 某个初始值 (边界条件)
➢ 其中Sk是第k段的某个状态,Uk是从Sk出发的允许决 策集合Dk(Sk)中的一个决策,Tk(Sk,Uk)是定义在数值 x和决策Uk上的一个函数,而函数opt表示最优化, 根据具体问题分别表示为max或min。例中最短路径
noip动态规划1
第一章 回归分析的性质
➢动态规划
➢ 与递归程序相类,将对问题求解分解为对子问 题求解;不同之处在于把子问题的解存起来, 用空间换时间。
➢ 例:Fibonacci数
F(0)=0; F(1)=1; F(n)=F(n-1)+F(n-2); 递归: F(n-1)和F(n-2)分别求到底一次 动态规划:用数组将前n-1个数存起来,每次只用
由常识知,最短路有一个重要特性:最短路上的任一(后部)子
路也是最短的。即
若 A---B3---C1---D1---E 是 A---E 最短,
则
B3---C1---D1---E 是 B3---E 最短路,
C1---D1---E 也是C1---E 最短路.
利用最短路的这一特性,构造寻找 A---E 最短路的方法,即为:
D3
信友队 2023noip模拟 题解
【主题】信友队 2023noip模拟题解【内容】一、开篇近年来,信息学竞赛在我国逐渐兴起,成为学生展示自己编程能力和解题能力的舞台。
NOIP(全国青少年信息学奥林匹克联赛)作为我国信息学竞赛中的重要赛事之一,备受青少年程序员的关注和参与。
在备战NOIP的过程中,模拟赛成为一种重要的练习方式。
本文将围绕信友队 2023noip模拟的题目进行详细解析,帮助读者更好地理解这些题目的解法。
二、题目一1. 题目描述题目一要求找出一个长度为n的01串中,有多少个子串的异或和是偶数。
其中,n的范围是1 ≤ n ≤ 10^5。
2. 解题思路考虑动态规划的思想,假设f[i]表示以第i位结尾的子串的异或和的奇偶性,则f[i]的值由f[i-1]的值和当前位的值决定。
具体而言,如果f[i-1]是偶数,则以第i位结尾的子串的异或和是奇数;如果f[i-1]是奇数,则以第i位结尾的子串的异或和是偶数。
可以通过遍历整个01串,根据f[i-1]的奇偶性判断以第i位结尾的子串的异或和的奇偶性,并统计出最后的结果。
3. 代码实现```pythondef solve(s):n = len(s)t = 0even, odd = 0, 0for i in range(n):if int(s[i]) == 0:even += 1else:odd += 1if (even % 2 == 0) or (odd % 2 == 0):t += 1returnt```4. 结果分析通过以上代码实现的函数solve,可以很快得出题目所要求的结果。
该方法的时间复杂度为O(n),效率较高,能够满足题目给定的数据规模范围。
三、题目二1. 题目描述题目二给出一个n*m的矩阵,矩阵中的元素为非负整数。
求出从左上角到右下角的路径中,路径上的所有元素之和的最大值。
其中,n和m的范围分别为1 ≤ n, m ≤ 100。
2. 解题思路这是一个典型的动态规划问题。
考虑定义一个二维数组dp,其中dp[i][j]表示从起点到矩阵中第i行第j列元素的路径的最大和。
历届NOIP搜索算法全集 动态规划
历届NOIP搜索算法全集摘要:算法分析:如果采用贪心法,则先取价值最大的10,消耗了容积8,下面只能取容积为4的.... [数据结构] time,price数组分别用来存入时间和价值,count来存入背包的价值。
...关键词:算法,数据结构类别:专题技术来源:牛档搜索()本文系牛档搜索()根据用户的指令自动搜索的结果,文中内涉及到的资料均来自互联网,用于学习交流经验,作品其著作权归原作者所有。
不代表牛档搜索()赞成本文的内容或立场,牛档搜索()不对其付相应的法律责任!历届NOIP搜索算法全集转自:oifans用动态规划来解背包问题在历届NOIP竞赛中,有4道初赛题和5道复赛题均涉及到背包问题,所谓的背包问题,可以描述如下:一个小偷打劫一个保险箱,发现柜子里有N类不同大小与价值的物品,但小偷只有一个容积为M的背包来装东西,背包问题就是要找出一个小偷选择所偷物品的组合,以使偷走的物品总价值最大。
如有4件物品,容积分别为: 3 4 5 8对应的价值分别为:4 5 7 10小偷背包的载重量为:12则取编号为1 2 3的物品,得到最大价值为16。
算法分析:如果采用贪心法,则先取价值最大的10,消耗了容积8,下面只能取容积为4的物品,得到价值5,这样总价值是15,这不是最优解,因此贪心法是不正确的。
采用穷举法,用一个B数组来表示取数的标记,当B=0时表示第i件物品不取,当B=1时表示第i件物品已取,初始化全部取0,以下算法是从后面的物品开始取起,通过B数组的取值把15种取法全部穷举出来,价值MAX初始化为0。
B[0] B[1] B[2] B[3] B[4]0 0 0 0 0 {初始化}0 0 0 0 1 {取第4件物品,容积为8,不超,价值为10,将MAX替换为10}0 0 0 1 0 {取物品3,容积为5,不超,价值为7,不换}0 0 0 1 1 {取物品3、4,容积为13,超}0 0 1 0 0 {取物品2,容积为4,不超,价值为5,不换}0 0 1 0 10 0 1 1 00 0 1 1 1……0 1 1 1 0 {这是最佳方案}0 1 1 1 11 0 0 0 0 {当B〔0〕=1时停止,B〔0〕称为哨兵}生成B数组中数据的方法如下:fillchar(b,sizeof(b),0);while b[0]=0 dobegin j:=n;while b[j]=1 do dec(j);b[j]:=1;for i:=j+1 to n dob:=0;end;小结:以上每件物品只能取1件,所以取法只有0和1两种情况,我们称之为0、1背包,算法的时间复杂度为O(2N),在1秒内N只能做到20。
NOIP普及讲座3-动态规划1
【输入格式】 第一行,整数B(1<=B<=1000) 第2到B+1行,每行两个整数,表示一个区间,较小的端点在前面 【输出格式】 仅一个整数,表示最多能吃到多少个槽里的食物。 【样例输入】 3 13 78 34 【样例输出】 5
【问题分析】 状态: f[i]代表吃了第i个区间最多能多少食物 方程: f[i]=max(f[j])+i个区间的长度(1<=j<i)且第i颗区间的 开始时间要大于j的区间的结束时间
• (4)策略和最优策略:由所有阶段的决策 组成的决策序列称为全过程策略,简称策 略。 在实际问题中,从决策允许集合中找 出最优效果的策略称为最优策略。 • (5)状态转移方程:状态转移方程是确定 两个相邻阶段状态的演变过程。
• (1)最优化 子问题的局部最优将导致整个问题的全 局最优,即问题具有最优子结构的性质。 也就是说问题的一个最优解中包含着子问 题的一个最优解。 • (2)无后效性 当前阶段中的状态只能由上一个阶段中 的状态转移方程得来,与其他阶段的状态 没有关系,特别是与未发生的阶段状态没 有关系,这就是无后效性。
【输入格式】 第一行为两个整数M,N。接下来是一个N×M的矩阵,其中矩阵的第i 行的第j列的 数 Aij表明第i个公司分配j台机器的盈利。所有数据之间用一个空格分隔。 【输出格式】 只有一个数据,为总公司分配这M台设备所获得的最大盈利。 【样例输入】 32 123 234 【样例输出】 4
【问题分析】 状态: f[i,j]代表前i个公司分配到j台设备所能获得的最大盈利 方程 f[i,j]=max(f[i-1,j-k]+a[i,k]) 0<=k<=j
【程序实现】
【例题5】机器分配 问题描述: 某总公司拥有高效生产设备M台,准备分给下属的N 个分公司。各分 公司若获得这些设备,可以为总公司提供一定的盈利。问:如何分 配这 M 台设备才能使国家得到的盈利最大?求出最大盈利值。 分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总 设备数 M。其中M<=100,N<=100。
