一道noip模拟题 高手求解 或 解释下同学的程序!

一道noip模拟题 高手求解 或 解释下同学的程序!
上楼梯
Stairs.pas/in/out
有N+2级楼梯,分别用0至N+1编号,第1至N级楼梯上每级都放有一个奖品,每个奖品都有一个正的价值.如果某人从第0级开始,向上走M步正好到达第N+1级楼梯,他将得到所走过的楼梯上的所有奖品,否则他将一无所获.问能得到的奖品价值的和最大是多少?
当然,一步不可能走太多级楼梯,假设每步最多上K级,即最多从第 i 级走到第 i+K 级.
[输入]
第一行3个数n,m,k
记下来n行Wi,表示第i级楼梯上的奖品价值,1
幽谷清泉0 1年前 已收到1个回答 举报

青青风信子 幼苗

共回答了23个问题采纳率:95.7% 举报

你很好学呀,你的这个是搜来的吧.应为没人会打开头那些可有可无的程序.
倒数第三行可知f数组是包含最大可以获得的奖品价值(也就是快排找最大)
c数组自然就是放每两级的值来做排序的比较和来存f数组最优.
支持原创!抄袭的不得好死!

1年前 追问

1

幽谷清泉0 举报

动规方程是什么

举报 青青风信子

举个例子吧: 例题: 问题A:有向无环图(一个终点)中指定的点到终点间最短路径问题(最小票价) 上图为n个城市间的交通网,边上的权是票价,计算v1与V9城市间的最小票价(实际上可计算任意点到V9的最小票价)。 问题B:有向无环图(一个终点)中指定的点到终点间最长路径问题(关键路径) 工厂的工程计划用一张有向图表示(上图),有向图的顶点表示事件,有向边表示活动,边上的权表明一项活动需要的时间。上述有向图存在唯一的入度为0的开始顶点V1,表明整个计划从该事件开始;同时存在唯一的出度为0的完成顶点V9,表明该事件完成后,整个计划结束。现在的问题是,整个计划完成至少需要多少时间? 知识点:AOV网(活动顶点网络)---条件:①存在唯一的入度为0的顶点和唯一的出度为0的顶点②有向无环图 算法讲 ①本题采用高效的动态规则法算法。 ②计算所有点的出度 ③找出所有出度=0的点的前驱点,依次处理各点,并记下新的最小值或最大值,并将该点与前驱点的出度减1 ④循环第③步,直到所有点的出度<>0 ⑤ var N:integer; A:array[1..9,1..9] of integer; Cdu,min,max:array[1..9] of integer; i,j,k:integer; begin N:=9; //共有9个点 A[1,2]:=6; A[1,3]:=4; A[1,4]:=5; A[2,5]:=1; A[3,5]:=1; A[4,6]:=2; A[5,7]:=9; A[5,8]:=7; A[5,9]:=10; A[6,8]:=4; A[7,9]:=2; A[8,9]:=4; for i:=1 to N-1 do //计算各点的出度 for j:=i+1 to N do if A[i,j]>0 then inc(Cdu[i]); for i:=1 to N do begin //最多处理N次 for j:=1 to N do if Cdu[j]=0 then break; //查找出度=0的点 for k:=1 to N do if a[k,j]>0 then begin //计算最小票价算法 if min[k]=0 then min[k]:=a[k,j]+min[j] else if min[k]>min[j]+a[k,j] then min[k]:=min[j]+a[k,j]; if max[j]+a[k,j]>max[k] then max[k]:=max[j]+a[k,j]; //计算关键路径算法 dec(Cdu[k]); dec(Cdu[j]); //点k、点j的出度减1 end; end; writeln('min=',min[1]); //输出点1到终点9的最短路径 writeln('max=',max[1]); //输出点1到终点9的最长路径 end.
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.040 s. - webmaster@yulucn.com