资源分配类动态规划
动态规划资源分配问题

S1
7
X1
12
3
4
P1(x1)
44
5
8
F2+ p1 21 19
17 18
f1(s1)
21
X1*
1
• 当k=2时;
f2(s2) = max [p2(x2)+ f3(s3) ]
1< x2 < s2 3< s2< 6 计算结果:
S2 X2 p2(x2) F3+ p2 f2(s2) X2*
34 1 12 3 35 10 12 12 10 12 1 1或2
f(k* sk ) max{ fk (sk , xk )}
xk 1,2,3...,sk
4
xi sk
ik
xi大于等于1且为整数
将递推关系写出即是
f
* k
(
sk
)
xk
max
1, 2 ,..., sk
{Pk
(
xk
)
f
* k 1
(
sk
xk )}
f(5* s5)=0
k 1,2,3
当k=4时;
f4(s4) = max [p4(x4)]
S3 X3 p3(x3) F3+ p3 f3(s3) X3*
23 1 12 5 56 7 98 79 11
4 123 568 12 10 10 12 1
5 1 2 34 5 6 88 13 13 12 10 13 1或2
• 当k=1时;
f1(s1) = max [p1(x1)+ f2(s2) ]
1< x1< s1 s1=7 计算结果:
5 123 35 6 15 14 13 15 1
动态规划

=MIN(3+12,4+10)=14
最短路线: A—— B2 ——C2——D2——E2——F 最优解: d1*(A)= B2,最短用时14
1
B2
C3
4 2
D3
5
E2
4
A
2
C2
3 3 3
D2
2
F
3
B1
5 4
C1
4
2
E1
最优解: d2*(B1)= C1
1
B2
C3
4 2
D3
5
E2
4
A
2
C2
3 3 3
D2
2
F
3
B1
5 4
C1
4
2
E1
4
3
D1
A
B
C
D
E
F
如果S2=B2,则下一步能取C2或C3,故
f2(B2)=MIN r(B2,C2)+ f3(C2)
r(B2,C3)+ f3(C3) =MIN(2+8,1+11)=10
最短路线: B2 ——C2——D2——E2——F
1
B2
C3
4 2
D3
5
E2
4
A
2
C2
3 3 3
D2
2
F
3
B1
5 4
C1
4
2
E1
4
3
D1
A
B
C
D
E
F
如果S4=D3,则下一步只能取E2,故
2019年最新-动态规划资源分配问题-精选文档

课程 1 学分 复习天数
234
1
4 35 2
2
54 5 6
3
4
4
5 68 7
8 7 88
解:这个问题要求作出4个相应关联的决策,即应分配多 少天给每门考试科目。因此,即使这里没有固定的次序, 这四门考试科目可以看成动态规划模型中的四个阶段。 阶段:k=1,2,3,4。考试科目 决策变量:x(k k=1,2,3,4)是分配到阶段(考试科目) k的天数; 状态变量:sk是仍待分配的天数(即前面阶段未分配完的天数)
令
P(ixBiblioteka )表示分配ix 天给考试科目
i 的效果量,我们的目标
是挑选
x
,
1
x
,
2
x
,
3
x
,使
4
max [ P1 ( x1 ) P2 ( x 2 ) P3 ( x 3 ) P4 ( x 4 )]
s.t x 1 x 2 x 3 x 4 7
x
,
1
x
,
2
x
,
3
x
4
1且为整数
目标可改写成
8 4
• 当k=3时;
f3(s3) = max [p3(x3)+ f4(s4) ]
1< x3 < s3 2< sk< 5 计算结果:
S3 X3 p3(x3) F3+ p3 f3(s3) X3*
23 1 12 5 56 7 98 79 11
4 123 568 12 10 10 12 1
5 1 2 34 5 6 88 13 13 12 10 13 1或2
动态规划——资源分配问题
动态规划法求解资源分配问题

cout<<endl; }
//主要代码 for (j = 1; j <= m; j++) for (i = 1; i <= n; i++) for (k = 0; k <= i; k++) if (d[i][j] < d[k][j - 1] + p[i - k][j]) { d[i][j] = d[k][j - 1] + p[i - k][j]; e[i][j] = k; }
4种常见的动态规划模型

例谈四种常见的动态规划模型动态规划是解决多阶段决策最优化问题的一种思想方法,本文主要结合一些例题,把一些常见的动态规划模型,进行归纳总结。
(一)、背包模型可用动态规划解决的背包问题,主要有01背包和完全背包。
对于背包的类型,这边就做个简单的描述:n个物品要放到一个背包里,背包有个总容量m,每个物品都有一个体积w[i]和价值v[i],问如何装这些物品,使得背包里放的物品价值最大。
这类型的题目,状态表示为:f[j]表示背包容量不超过j时能够装的最大价值,则状态转移方程为:f[j]:=max{f[j-w[i]]+v[i]},边界:f[0]:=0;简单的程序框架为:beginreadln(m,n);for i:=1to n do readln(w[i],v[i]);f[0]:=0;for i:=1to m dofor j:=1to n dobeginif i>=w[j]then t:=f[i-w[j]]+v[j];if t>f[i]then f[i]:=t;end;writeln(f[m]);end.这类型的题目应用挺广的(noip1996提高组第4题,noip2001普及组装箱问题,noip2005普及组采药等),下面一个例子,也是背包模型的简单转化。
货币系统(money)【问题描述】母牛们不但创建了他们自己的政府而且选择了建立了自己的货币系统。
他们对货币的数值感到好奇。
传统地,一个货币系统是由1,5,10,20或25,50,100的单位面值组成的。
母牛想知道用货币系统中的货币来构造一个确定的面值,有多少种不同的方法。
使用一个货币系统{1,2,5,10,..}产生18单位面值的一些可能的方法是:18×1,9×2,8×2+2×1,3×5+2+1等等其它。
写一个程序来计算有多少种方法用给定的货币系统来构造一个确定的面值。
【输入格式】货币系统中货币的种类数目是v(1≤v≤25);要构造的面值是n(1≤n≤10,000);第1行:二个整数,v和n;第2..v+1行:可用的货币v个整数(每行一个)。
动态规划状态转移方程

1.资源问题1-----机器分配问题F[I,j]:=max(f[i-1,k]+w[i,j-k])2.资源问题2------01背包问题F[I,j]:=max(f[i-1,j-v[i]]+w[i],f[i-1,j]);3.线性动态规划1-----朴素最长非降子序列F[i]:=max{f[j]+1}4.剖分问题1-----石子合并F[i,j]:=min(f[i,k]+f[k+1,j]+sum[i,j]);5.剖分问题2-----多边形剖分F[I,j]:=min(f[i,k]+f[k,j]+a[k]*a[j]*a[i]);6.剖分问题3------乘积最大f[i,j]:=max(f[k,j-1]*mult[k,i]);7.资源问题3-----系统可靠性(完全背包)F[i,j]:=max{f[i-1,j-c[i]*k]*P[I,x]}8.贪心的动态规划1-----快餐问题F[i,j,k]:=max{f[i-1,j',k']+(T[i]-(j-j')*p1-(k-k')*p2) div p3}9.贪心的动态规划2-----过河f[i]=min{{f(i-k)} (not stone[i]){f(i-k)}+1} (stone[i]); +贪心压缩状态10.剖分问题4-----多边形-讨论的动态规划F[i,j]:=max{正正 f[I,k]*f[k+1,j];负负 g[I,k]*f[k+1,j];正负 g[I,k]*f[k+1,j];负正 f[I,k]*g[k+1,j];} g为min11.树型动态规划1-----加分二叉树 (从两侧到根结点模型)F[I,j]:=max{f[I,k-1]*f[k+1,j]+c[k]}12.树型动态规划2-----选课 (多叉树转二叉树,自顶向下模型)F[I,j]表示以i为根节点选j门功课得到的最大学分f[i,j]:=max{f[t[i].l,k]+f[t[i].r,j-k-1]+c[i]}13.计数问题1-----砝码称重f[f[0]+1]=f[j]+k*w[j];(1<=i<=n; 1<=j<=f[0]; 1<=k<=a[i];)14.递推天地1------核电站问题f[-1]:=1; f[0]:=1;f[i]:=2*f[i-1]-f[i-1-m]15.递推天地2------数的划分f[i,j]:=f[i-j,j]+f[i-1,j-1];16.最大子矩阵1-----一最大01子矩阵f[i,j]:=min(f[i-1,j],v[i,j-1],v[i-1,j-1])+1;ans:=maxvalue(f);17.判定性问题1-----能否被4整除g[1,0]:=true; g[1,1]:=false; g[1,2]:=false; g[1,3]:=false; g[i,j]:=g[i-1,k] and ((k+a[i,p]) mod 4 = j)18.判定性问题2-----能否被k整除f[I,j±n[i] mod k]:=f[i-1,j]; -k<=j<=k; 1<=i<=n20.线型动态规划2-----方块消除游戏f[i,i-1,0]:=0f[i,j,k]:=max{f[i,j-1,0]+sqr(len(j)+k),f[i,p,k+len[j]]+f[p+1,j-1,0]}ans:=f[1,m,0]21.线型动态规划3-----最长公共子串,LCS问题f[i,j]={0(i=0)&(j=0);f[i-1,j-1]+1(i>0,j>0,x[i]=y[j]);max{f[i,j-1]+f[i-1,j]}} (i>0,j>0,x[i]<>y[j]);22.最大子矩阵2-----最大带权01子矩阵O(n^2*m)枚举行的起始,压缩进数列,求最大字段和,遇0则清零23. 资源问题4-----装箱问题(判定性01背包)f[j]:=(f[j] or f[j-v[i]]);24.数字三角形1-----朴素の数字三角形f[i,j]:=max(f[i+1,j]+a[I,j],f[i+1,j+1]+a[i,j]);25.数字三角形2-----晴天小猪历险记之Hill同一阶段上暴力动态规划if[i,j]:=min(f[i,j-1],f[I,j+1],f[i-1,j],f[i-1,j-1])+a[i,j]26.双向动态规划1数字三角形3-----小胖办证f[i,j]:=max(f[i-1,j]+a[i,j],f[i,j-1]+a[i,j],f[i,j+1]+a[i,j])27. 数字三角形4-----过河卒//边界初始化f[i,j]:=f[i-1,j]+f[i,j-1];28.数字三角形5-----朴素的打砖块f[i,j,k]:=max(f[i-1,j-k,p]+sum[i,k],f[i,j,k]);29.数字三角形6-----优化的打砖块f[I,j,k]:=max{g[i-1,j-k,k-1]+sum[I,k]}30.线性动态规划3-----打鼹鼠’f[i]:=f[j]+1;(abs(x[i]-x[j])+abs(y[i]-y[j])<=t[i]-t[j])31.树形动态规划3-----贪吃的九头龙⎭⎬⎫⎩⎨⎧======⎭⎬⎫⎩⎨⎧+-++--+=0))2()0(&)0(())1(&)1((1],[]][,[*]0,[],',[]0,',[]][,[*]1,[],1',[]1,',[min ],,[m and j i or j i j i d i p i w k d k j j r f j l f i p i w k d k j j r f j l f k j i f32.状态压缩动态规划1-----炮兵阵地Max(f[Q*(r+1)+k],g[j]+num[k])If (map[i] and plan[k]=0) and((plan[P] or plan[q]) and plan[k]=0)33.递推天地3-----情书抄写员f[i]:=f[i-1]+k*f[i-2]34.递推天地4-----错位排列f[i]:=(i-1)(f[i-2]+f[i-1]);f[n]:=n*f[n-1]+(-1)^(n-2);35.递推天地5-----直线分平面最大区域数f[n]:=f[n-1]+n:=n*(n+1) div 2 + 1;36.递推天地6-----折线分平面最大区域数f[n]:=(n-1)(2*n-1)+2*n;37.递推天地7-----封闭曲线分平面最大区域数f[n]:=f[n-1]+2*(n-1):=sqr(n)-n+2;38递推天地8-----凸多边形分三角形方法数f[n]:=C(2*n-2,n-1) div n;对于k 边形f[k]:=C(2*k-4,k-2) div (k-1); //(k>=3)39递推天地9-----Catalan 数列一般形式1,1,2,5,14,42,132f[n]:=C(2k,k) div (k+1);40递推天地10-----彩灯布置排列组合中的环形染色问题f[n]:=f[n-1]*(m-2)+f[n-2]*(m-1); (f[1]:=m; f[2]:=m(m-1);41线性动态规划4-----找数线性扫描sum:=f[i]+g[j];(if sum=Aim then getout; if sum<Aim then inc(i) else inc(j);)42线性动态规划5-----隐形的翅膀min:=min{abs(w[i]/w[j]-gold)};if w[i]/w[j]<gold then inc(i) else inc(j);43剖分问题5-----最大奖励f[i]:=max(f[i],f[j]+(sum[j]-sum[i])*i-t44最短路1-----Floydf[i,j]:=max(f[i,j],f[i,k]+f[k,j]);ans[q[i,j,k]]:=ans[q[i,j,k]]+s[i,q[i,j,k]]*s[q[i,j,k],j]/s[i,j];45 剖分问题6-----小H 的小屋F[l,m,n]:=f[l-x,m-1,n-k]+S(x,k);46 计数问题2-----陨石的秘密(排列组合中的计数问题)Ans[l1,l2,l3,D]:=f[l1+1,l2,l3,D+1]-f[l1+1,l2,l3,D];F[l1,l2,l3,D]:=Sigma(f[o,p,q,d-1]*f[l1-o,l2-p,l3-q,d]);47 线性动态规划------合唱队形两次F[i]:=max{f[j]+1}+枚举中央结点48 资源问题------明明的预算方案:加花的动态规划f[i,j]:=max(f[i,j],f[l,j-v[i]-v[fb[i]]-v[fa[i]]]+v[i]*p[i]+v[fb[i]]*p[fb[i]]+v[fa[i]]*p[fa[i]]);49 资源问题-----化工场装箱员[,[1,],[1,]][,,]:min [,[1,],[1,]]1[10,[1,10],[1,10]f n i getA n n i j getB n n i f n i j f n j i getA n n j getB n n j f n i j i getA n n i j j getB n n i j ++++++⎧⎫⎪⎪=+++++++⎨⎬⎪⎪+--+++--+++--⎩⎭-----聚会的快乐f[i,2]:=max(f[i,0],f[i,1]);f[i,1]:=sigma(f[t[i]^.son,0]);f[i,0]:=sigma(f[t[i]^.son,3]);51树形动态规划-----皇宫看守f[i,2]:=max(f[i,0],f[i,1]);f[i,1]:=sigma(f[t[i]^.son,0]);f[i,0]:=sigma(f[t[i]^.son,3]);52递推天地-----盒子与球f[i,1]:=1;f[i,j]:=j*(f[i-1,j-1]+f[i-1,j]);53双重动态规划-----有限的基因序列f[i]:=min{f[j]+1}g[c,i,j]:=(g[a,i,j] and g[b,i,j]) or (g[c,i,j])54最大子矩阵问题-----居住空间f[i,j,k]:=min(min(min(f[i-1,j,k],f[i,j-1,k]),min(f[i,j,k-1],f[i-1,j-1,k])),min(min(f[i-1,j,k-1],f[i,j-1,k-1]),f[i-1,j-1,k-1]))+1;55线性动态规划------日程安排f[i]:=max{f[j]}+P[I]; (e[j]<s[i])56递推天地------组合数C[I,j]:=C[i-1,j]+C[I-1,j-1]C[I,0]:=157树形动态规划-----有向树k中值问题F[I,r,k]:=max{max{f[l[i],I,j]+f[r[i],I,k-j-1]},f[f[l[i],r,j]+f[r[i],r,k-j]+w[I,r]]}58树形动态规划-----CTSC 2001选课F[I,j]:=w[i](if i∈P)+f[l[i],k]+f[r[i],m-k](0≤k≤m)(if l[i]<>0)-----多重历史f[i,j]:=sigma{f[i-k,j-1]}(if checked)60背包问题(+-1背包问题+回溯)-----CEOI1998 Substractf[i,j]:=f[i-1,j-a[i]] or f[i-1,j+a[i]]61线性动态规划(字符串)-----NOI 2000 古城之谜f[i,1,1]:=min{f[i+length(s),2,1],f[i+length(s),1,1]+1}f[i,1,2]:=min{f[i+length(s),1,2]+words[s],f[i+length(s),1,2]+words[s]}62线性动态规划-----最少单词个数f[i,j]:=max{f[I,j],f[u-1,j-1]+l}63线型动态规划-----APIO2007 数据备份状态压缩+剪掉每个阶段j前j*2个状态和j*2+200后的状态贪心动态规划f[i]:=min(g[i-2]+s[i],f[i-1]);64树形动态规划-----APIO2007 风铃f[i]:=f[l]+f[r]+{1 (if c[l]<c[r])}g[i]:=1(d[l]<>d[r]) 0(d[l]=d[r])g[l]=g[r]=1 then Halt;65地图动态规划-----NOI 2005 adv19910F[t,i,j]:=max{f[t-1,i-dx[d[[t]],j-dy[d[k]]]+1],f[t-1,i,j];66地图动态规划-----优化的NOI 2005 adv19910F[k,i,j]:=max{f[k-1,i,p]+1} j-b[k]<=p<=j;67目标动态规划-----CEOI98 subtraF[I,j]:=f[I-1,j+a[i]] or f[i-1,j-a[i]]68目标动态规划----- Vijos 1037搭建双塔问题F[value,delta]:=g[value+a[i],delta+a[i]] or g[value,delta-a[i]]69树形动态规划-----有线电视网f[i,p]:=max(f[i,p],f[i,p-q]+f[j,q]-map[i,j])leaves[i]>=p>=l, 1<=q<=p;70地图动态规划-----vijos某题F[I,j]:=min(f[i-1,j-1],f[I,j-1],f[i-1,j]);71最大子矩阵问题-----最大字段和问题f[i]:=max(f[i-1]+b[i],b[i]); f[1]:=b[1]72最大子矩阵问题-----最大子立方体问题枚举一组边i的起始,压缩进矩阵 B[I,j]+=a[x,I,j]枚举另外一组边的其实,做最大子矩阵73括号序列-----线型动态规划f[I,j]:=min(f[I,j],f[i+1,j-1](s[i]s[j]=”()”or(”[]”)),f[I+1,j+1]+1 (s[j]=”(”or”[” ] , f[I,j-1]+1(s[j]=”)”or”]” )74棋盘切割-----线型动态规划f[k,x1,y1,x2,y2]=min{min{f[k-1,x1,y1,a,y2]+s[a+1,y1,x2,y2],f[k-1,a+1,y1,x2,y2]+s[x1,y1,a,y2]min{}}75概率动态规划-----聪聪和可可(NOI2005)x:=p[p[i,j],j]f[I,j]:=(f[x,b[j,k]]+f[x,j])/(l[j]+1)+1f[I,i]=0f[x,j]=176概率动态规划-----血缘关系F[A, B]=(f[A0, B]+P[A1, B])/2f[I,i]=1f[I,j]=0(I,j无相同基因)77线性动态规划-----决斗F[I,j]=(f[I,j] and f[k,j]) and (e[I,k] or e[j,k]),i<k<j78线性动态规划-----舞蹈家F[x,y,k]=min(f[a[k],y,k+1]+w[x,a[k]],f[x,a[k],k+1]+w[y,a[k]])79线性动态规划-----积木游戏F[I,a,b,k]=max(f[I,a+1,b,k],f[i+1,a+1,a+1,k’],f[I,a+1,a+1,k’])80树形动态规划(双次记录)-----NOI2003 逃学的小孩朴素的话枚举节点i和离其最远的两个节点 j,k O(n^2)每个节点记录最大的两个值,并记录这最大值分别是从哪个相邻节点传过来的。
动态规划在资源配置中的应用研究

动态规划在资源配置中的应用研究在当今复杂多变的社会和经济环境中,资源的有效配置成为了各个领域追求高效发展的关键。
而动态规划作为一种强大的数学优化方法,在资源配置问题中发挥着至关重要的作用。
动态规划的核心思想在于将一个复杂的问题分解为一系列相互关联的子问题,并通过对这些子问题的求解来逐步得出原问题的最优解。
这种方法的优势在于它能够充分考虑到问题的动态性和阶段性,从而更加贴合实际情况。
资源配置问题通常涉及到多个因素的权衡和决策。
例如,在企业生产中,需要决定如何分配有限的人力、物力和财力资源,以实现最大的产出和利润;在项目管理中,要合理安排任务的顺序和资源的投入,确保项目按时完成且成本最低;在交通运输领域,需要优化车辆的调度和路线规划,以提高运输效率和降低运营成本。
以生产企业为例,假设一家工厂有多种产品可以生产,每种产品的生产需要消耗不同数量的原材料、工时和设备使用时间,同时每种产品在市场上的售价也不同。
为了实现利润最大化,企业需要决定每种产品的生产数量。
这就是一个典型的资源配置问题。
如果使用传统的方法来解决这个问题,可能会面临计算复杂、难以考虑所有可能情况等困难。
而动态规划则为我们提供了一种有效的解决方案。
首先,我们可以将生产计划划分为多个阶段,每个阶段对应一个决策点,即决定是否生产某种产品以及生产多少。
然后,我们定义状态变量,例如在某个阶段剩余的原材料、工时和设备可用时间等。
接着,通过建立递推关系式,计算在每个阶段不同决策下的收益,并选择最优的决策。
动态规划在资源配置中的应用具有以下几个显著的优点:一是能够处理大规模的问题。
随着问题规模的增大,传统方法的计算量往往呈指数级增长,而动态规划通过巧妙的分解和递推,可以有效地降低计算复杂度。
二是能够考虑到问题的动态变化。
在实际的资源配置中,各种因素可能会随着时间而发生变化,例如原材料价格的波动、市场需求的变化等。
动态规划可以根据这些变化及时调整策略,保证资源配置的最优性。
动态规划方案解决资源分配问题的策略

动态规划方案解决资源分配问题的策略在幼儿教育事业中,资源分配问题是一项至关重要的任务。
如何合理、高效地分配教育资源,以满足幼儿的需求和发展,成为幼儿工作者们关注的焦点。
针对这一问题,我们引入动态规划这一优化算法,提出一套解决方案,以期为我国幼儿教育事业的发展提供有力支持。
一、背景及问题阐述随着我国经济社会的快速发展,幼儿教育事业逐渐受到广泛关注。
然而,在资源分配方面,幼儿教育仍面临诸多问题。
一方面,资源分配不均,城乡、地区之间差距较大,部分幼儿无法享受到优质的教育资源;另一方面,资源利用效率低下,导致教育成本上升,加剧了教育资源供需矛盾。
为解决这一问题,我们需要对教育资源进行合理分配,提高资源利用效率。
动态规划作为一种优化算法,具有实现全局最优、求解效率高等特点,适用于解决资源分配问题。
本文将以幼儿教育资源分配为背景,探讨动态规划在解决资源分配问题方面的应用。
二、动态规划基本原理动态规划(DynamicProgramming,DP)是一种求解最优化问题的方法,它将复杂问题分解为多个子问题,并通过求解子问题来实现全局最优。
动态规划的核心思想是“记住已经解决过的子问题的最优解”,从而避免重复计算。
1.确定状态:将问题分解为若干个子问题,并用状态变量表示这些子问题。
2.建立状态转移方程:找出子问题之间的关系,建立状态转移方程,表示当前状态如何通过前一个状态得到。
3.确定边界条件:设定初始状态和边界条件,为递推过程提供基础。
4.计算最优解:根据状态转移方程,从初始状态开始递推,得到问题的最优解。
5.构造最优解:根据最优解的递推过程,构造出问题的最优解。
三、动态规划解决资源分配问题的策略1.状态定义我们将资源分配问题分为两个状态:当前状态和子状态。
当前状态表示在某一时间点或某一阶段,已分配的资源总量;子状态表示在分配过程中,某一特定资源类型的分配情况。
2.状态转移方程状态转移方程是动态规划的核心,它描述了当前状态如何由子状态得到。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分析
由于动态规划要满足无后效性和最优化原理,所以我们来分析此题 是否满足以上两点。首先确定状态,商品不超过5种,而每种采购 的数量又不超过5,那么用一个五元组来表示第i种商品买Ai的最小 费用。 F ( A 1 , A 2 , A 3 , A 4 ,A 5 ) (1 ) 考虑这个状态的由来,当然,我们不用优惠商品也可以买,显然这 样不是最优。于是如果我们能够使用第i条商品组合的话,状态就b 变为了: F ( A 1 - S I 1 , A 2 - S I 2 ,A 3 - S I 3 , A 4 - S I 4 ,A 5 - S I 5 ) (2 ) 这样的话,状态1的费用为状态2的费用加上Si的费用,而状态2的费 用必须最低(很显然,用反证法即可),同时,我们也不管状态2 是如何来的(因为每一个优惠商品组合的使用是没有限制的),所 以本题既满足无后效性,又符合最优化原理,同时还有大量重叠子 问题产生,动态规划解决此题是最好不过了。
其他优化方法
1.存储结构:由于每一阶段状态只与上一阶段状态有关,所以我们可以 只用两个100*100的数组滚动实现。但考虑到滚动是有大量的赋值,可以 改进为动态数组,每次交换时只需交换指针即可,这样比原来数组间赋 值要快。 2.减少循环次数:在计算每一阶段状态过程中无疑要用到4重循环,我们 可以这样修改每一重循环的起始值和终数,其中q1,q2为A,B上限值。
i:=1 to n do j:=0 to tot[i] div p1 do k:=0 to (tot[i]-p1*j) div p2 do j1:=0 to j do for k1 := 0 to k do
商店购物
某商店中每种商品都有一个价格。例如,一朵花的价格是2 ICU(ICU 是 信息学竞赛的货币的单位);一个花瓶的价格是5 ICU。为了吸引更多的 顾客,商店提供了特殊优惠价。 特殊优惠商品是把一种或几种商品分成一组。并降价销售。例如:3朵花 的价格不是6而是5 ICU ;2个花瓶加1朵花是10 ICU不是12 ICU。 编一个程序,计算某个顾客所购商品应付的费用。要充分利用优惠价以 使顾客付款最小。请注意,你不能变更顾客所购商品的种类及数量,即 使增加某些商品会使付款总数减小也不允许你作出任何变更。假定各种 商品价格用优惠价如上所述,并且某顾客购买物品为:3朵花和2个花瓶。 那么顾客应付款为14 ICU因为: 1朵花加2个花瓶: 优惠价:10 ICU 2朵花 正常价: 4 ICU
原起始值
for for for for
改进后的起始值
for for for for i:=1 to n do j:=0 to min(q1,tot[i] div p1) do k:=0 to min(q2,(tot[i]-p1*j)div p2) do j1 := max(0,j-t[i] div p1) to min(j,tot[i-1] div p1) do for k1:=max(0,k-(t[i]-(j-j1)*p1) div p2) to min(k,(tot[i-1]-p1*j1)div p2) do
金明的预算方案
金明今天很开心, 金明今天很开心,家里购置 的新房就要领钥匙了, 的新房就要领钥匙了,新房 里有一间金明自己专用的很 宽敞的房间。 宽敞的房间。更让他高兴的 妈妈昨天对他说: 是,妈妈昨天对他说:“你 的房间需要购买哪些物品, 的房间需要购买哪些物品, 怎么布置,你说了算, 怎么布置,你说了算,只要 不超过N元钱就行 元钱就行” 不超过 元钱就行”。今天 一早,金明就开始做预算了, 一早,金明就开始做预算了, 他把想买的物品分为两类: 他把想买的物品分为两类: 主件与附件, 主件与附件,附件是从属于 某个主件的, 某个主件的,下表就是一些 主件与附件的例子: 主件与附件的例子: 主件 电脑 书柜 书桌 工作椅 附件 打印机, 打印机, 扫描仪 图书 台灯, 台灯,文 具 无
状态转移方程
F [a, b, c, d, e] = Min{F[a-Si1,b-Si2,c-Si3,d-Si4,e-Si5]+SaleCost[Si]} (0<=i<=S, 0<=a, b, c, d, e<=5) 初始条件为: F [a, b, c, d, e] = Cost[1]*a+Cost[2]*b+Cost[3]*c+Cost[4]*d+Cost[5]*e
资源类动态规划
朱全民
机器分配
总公司拥有高效生产设备M台,准备分给下属的N个公司。 各分公司若获得这些设备,可以为国家提供一定的盈利。 问:如何分配这M台设备才能使国家得到的盈利最大? 求出最大盈利值。其中M<=15,N<=10。分配原则:每个 公司有权获得任意数目的设备,但总台数不得超过总设 备数M。 数据文件格式为:第一行保存两个数,第一个数是设备 台数M,第二个数是分公司数N。接下来是一个M*N的 矩阵,表明了第I个公司分配J台机器的盈利。
快餐问题
Peter最近在R市开了一家快餐店,为了招揽顾客,该快餐店准备 推出一种套餐,该套餐由A个汉堡,B个薯条和C个饮料组成。价格 便宜。为了提高产量,Peter从著名的麦当劳公司引进了N条生产 线。所有的生产线都可以生产汉堡,薯条和饮料,由于每条生产 线每天所能提供的生产时间是有限的、不同的,而汉堡,薯条和 饮料的单位生产时间又不同。这使得Peter很为难,不知道如何安 排生产才能使一天中生产的套餐产量最大。请你编一程序,计算 一天中套餐的最大生产量。为简单起见,假设汉堡、薯条和饮料 的日产量不超过100个。 输入:第一行为三个不超过100的正整数A、B、C中间以一个空格分 开。第二行为3个不超过100的正整数p1,p2,p3分别为汉堡,薯条 和饮料的单位生产耗时。中间以一个空格分开。第三行为 N(0<=0<=10),第四行为N个不超过10000的正整数,分别为各条生 产流水线每天提供的生产时间,中间以一个空格分开。 输出:每天套餐的最大产量。
商店购物
输入数据 第一个文件INPUT.TXT的格式为:第一行是一个数字B(0≤B≤5), 表示所购商品种类数。下面共B行,每行中含3个数C,K,P。C 代 表商品的编码(每种商品有一个唯一的编码),1≤C≤999。K代 表该种商品购买总数,1≤K≤5。P 是该种商品的正常单价(每件 商品的价格),1≤P≤999。请注意,购物筐中最多可放5*5=25 件商品。 第二个文件OFFER.TXT的格式为:第一行是一个数字S(0≤S≤99), 表示共有S种优惠。下面共S行,每一行描述一种优惠商品的组合 中商品的种类。下面接着是几个数字对(C,K),其中C代表商品 编码,1≤C≤9 99。K代表该种商品在此组合中的数量,1≤K≤5。 本行最后一个数字P(1≤ P≤9999)代表此商品组合的优惠价。 当然, 优惠价要低于该组合中商品正常价之总和。 输出数据 在输出文件OUTPUT.TXT中写 一个数字(占一行), 该数字表示 顾客所购商品(输入文件指明所购商品)应付的最低货款。
分析
用机器数来做状态,数组F[I,J]表示前I 个公司分配J台机器的最大盈利。则状态 转移方程为: F[I,J]=Max{F[I-1,K] + Value[I,J-K]} (1<=I<=N,1<=J<=M,0<=K<=J ) 初始值: F(0,来自)=0 时间复杂度O(N*M2)
系统可靠性
一个系统由若干部件串联而成,只要有一个部件故障,系统就不能正 常运行,为提高系统的可靠性,每一部件都装有备用件,一旦原部件 故障,备用件就自动进入系统。显然备用件越多,系统可靠性越高, 但费用也越大,那么在一定总费用限制下,系统的最高可靠性等于多 少? 给定一些系统备用件的单价Ck,以及当用Mk个此备用件时部件的正常 工作概率Pk(Mk),总费用上限C。求系统可能的最高可靠性。 输入文件格式: 第一行:n C 第二行:C1 P1(0) P1(1) … P1(X1) (0<=X1<=[C/Ck]) … 第 n 行:Cn Pn(0) Pn(1) … Pn(Xn) (0<=Xn<=[C/Cn])
分析
本题是一个非常典型的资源分配问题。由于每条生产线的生产是相 互独立,不互相影响的,所以此题可以以生产线为阶段用动态规划 求解。 状态表示:用p[i,j,k]表示前i条生产线生产j个汉堡,k个薯条的 情况下最多可生产饮料的个数。 用r[i,j,k]表示第i条生产线生产j个汉堡,k个薯条的情况下最多 可生产饮料的个数。 态转移方程 : p[i,j,k] = Max{p[i-1,j1,k1]+r[i,j-j1,k-k1]} ( 0<=j1<=j<=100,0<=k1<=k<=100, 且(j-j1)*p1+(k-k1)*p2<=T[i]---第i条生产线的生产时间 ) r[i,j-j1,k-k1]=(T[i]-(j-j1)*p1+(k-k1)*p2) div p3 ; 此算法的时间复杂度为O(N*1004),
如果要买归类为附件的物品, 如果要买归类为附件的物品,必须先买该附件所 属的主件。每个主件可以有0个 个或2个附件 属的主件。每个主件可以有 个、1个或 个附件。 个或 个附件。 附件不再有从属于自己的附件。 附件不再有从属于自己的附件。金明想买的东西 很多,肯定会超过妈妈限定的N元 于是, 很多,肯定会超过妈妈限定的 元。于是,他把每 件物品规定了一个重要度,分为5等:用整数1~5 件物品规定了一个重要度,分为 等 用整数 表示, 等最重要。 表示,第5等最重要。他还从因特网上查到了每件 等最重要 物品的价格(都是10元的整数倍)。他希望在不 元的整数倍)。 物品的价格(都是 元的整数倍)。他希望在不 超过N元 可以等于N元 的前提下, 超过 元(可以等于 元)的前提下,使每件物品 的价格与重要度的乘积的总和最大。 的价格与重要度的乘积的总和最大。 设第j件物品的价格为 件物品的价格为v[j],重要度为 设第 件物品的价格为 ,重要度为w[j],共选中 , 件物品, 了k件物品,编号依次为 ,j2,……,jk,则所 件物品 编号依次为j1, , , , 求的总和为: 求的总和为: v[j1]*w[j1]+v[j2]*w[j2]+ …+v[jk]*w[jk]。(其中 。(其中 。(其中* 为乘号) 为乘号) 请你帮助金明设计一个满足要求的购物单。 请你帮助金明设计一个满足要求的购物单。