您的位置:首页 > 其它

tyvj p1023(奶牛的锻炼)(100)

2012-12-02 11:42 232 查看
看起来不是很难,一道动规题(话说最近一直在刷动规题啊)

一开始只想到两个动规方程:

f[i,j]表示第i分钟,疲劳度为j所能跑的最大距离。

我们有:

f[i,j]:=f[i-1,j-1]+s[i];

f[i+j,0]:=max(f[i+j,0],f[i,j]);(若从此状态开始休息,那么他的距离是和f[i+j,0]一样的)

后面想想不对,还少了一个方程。

因为如果你休息到疲劳度为0,那么你即可以选择跑步,也可以选择继续休息,所以我们还有一个方程:

f[i,0]:=max(f[i-1,0],f[i,0])。

这样就好了。

其实第二个方程还可以写成另一种形式:f[i,j]:=max(f[i,j],f[i-j,0])。其实是一个意思,只不过是一个是从现在推出将来,另一个是从过去推出现在。

接下来就很容易了。

program p1023;  uses math;
var
i,j,k,l,m,n:longint;
s:array[0..20]of longint;
f:array[0..20,0..50]of longint;
begin
read(n,m);
for i:=1 to n do
begin
read(s[i]);
end;
for i:=1 to n do
for j:=1 to m do
begin
if i>=j then
f[i,0]:=max(f[i-1,0],f[i,0]);
f[i,j]:=f[i-1,j-1]+s[i];
f[i+j,0]:=max(f[i+j,0],f[i,j]);
end;
write(f[n,0]);
end.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: