(题解)
这是一题比较典型的动态规划类题目,搜索(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]);
