作业帮 > 综合 > 作业

PASCAL动态规划一水题稀里糊涂就过了,

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/04/29 07:55:21
PASCAL动态规划一水题稀里糊涂就过了,
一个特别的单行街道在每公里处有一个汽车站.顾客根据他们乘坐汽车的公里使来付费.例如下表就是一个费用的单子.
没有一辆车子行驶超过10公里,一个顾客打算行驶n公里(1f[i-j]+a[j]) then
f[i]:=f[i-j]+a[j];
writeln(f[n]);
end.
转移方程应该没错,就是初始化的时候不大清楚……
我一开始是f[1]:=a[1];其他都赋值maxint;结果不对……
这样赋值稀里糊涂就过了……
或许还有更好的方法也可.
(我是菜鸟,我知道这是背包的……)
把f数组除了f[0]之外全部赋值为manint就可以了
if (i-j>0) and (f[i]>f[i-j]+a[j]) then
这里应该改为
if (i-j>=0) and (f[i]>f[i-j]+a[j]) then
这样f[i]就表示走到第i公里的最优解,第i公里从前面i-1,i-2,i-3.中的最优解中的转移过来,没必要将a中的数据赋值给f
大概是这样了
var
f:array[0..100] of integer;
a:array[1..10] of integer;
i,n,j,k:integer;
begin
for i:=1 to 10 do read(a[i]);
readln(n);
for i:=1 to n do f[i]:=maxint;
for i:=1 to n do
for j:=1 to 10 do
if (i-j>=0) and (f[i]>f[i-j]+a[j]) then
f[i]:=f[i-j]+a[j];
writeln(f[n]);
end.