(题解)
这是一题比较典型的动态规划类题目,搜索(search)会超时,所以只能用动态规划做。所以由此我们可以想到,用F[i,j]表示走到第i分钟时疲劳值为j走的最远距离。这段状态转移方程分为两段,一段是贝茜休息时的,一段是贝茜走路时的。休息时的:F[i,j]:=max(F[i,0]{贝茜在i时间段刚好休息完(疲劳值为0)},F[i-j,j]{贝茜从 i-j 时间段开始休息,当时的疲劳值为j }); F[i,0]:=F[i,j];
走路时的:F[i,j]:=max(F[i-1,j-1]{表示它从上一个时刻走到这一个时间前的值},F[i,j]{表示它本身});
下面是代码:
for i:=1 to n do
begin
f[i,0]:=f[i-1,0];
for j:=1 to m do
begin
if i-j>=0 then
begin
f[i,j]:=max(f[i,0],f[i-j,j]);
f[i,0]:=f[i,j];
end;
f[i,j]:=max(f[i-1,j-1]+a[i],f[i,j]);
end;
end;
writeln(f[n,0]);