bzoj 1613 dp

    xiaoxiao2021-03-25  109

    题意:n分钟,每分钟可以选择跑di米同时疲劳加1或者一直休息同时恢复疲劳减1,但要一直休息到疲劳值为0。在疲劳值为0的时候休息,疲劳值不变,开始时疲劳值为0。要求结束时疲劳值为0,求最多能跑多少米

    很容易的dp呀,O(n*m):

    f[i,j]表示第i分钟的疲劳值为j时最多跑多少米

    转移:f[i,j]=f[i-1,j-1]+d[i]

               f[i,0]=f[i-1,0]

               f[i,0]=max{f[i,0],f[i-j,j]}  (j<=i)

    最终答案:f[n,0]

    吐槽:mdzz,果然刚起床五分钟之内不适合做题,没看见要一直休息到疲劳值为0的要求,一直wa = =

    var n,m :longint; i,j :longint; d :array[0..10010] of longint; f :array[0..10010,0..510] of longint; function max(a,b:longint):longint; begin if a<b then exit(b) else exit(a); end; begin read(n,m); for i:=1 to n do read(d[i]); for i:=1 to n do begin f[i,0]:=f[i-1,0]; for j:=1 to m do begin f[i,j]:=f[i-1,j-1]+d[i]; if i-j>=0 then f[i,0]:=max(f[i,0],f[i-j,j]); end; end; writeln(f[n,0]); end. ——by Eirlys

    转载请注明原文地址: https://ju.6miu.com/read-11967.html

    最新回复(0)