bzoj1613 [Usaco2007 Jan]Running貝茜的晨練計划


老年選手eat shit了...這破題我交了三發...
f[i][j]表示經過了第i分鍾,疲勞度為j時的最大路程.然后有三種情況:
1.疲勞度為0,可以選擇繼續休息1分鍾(看上去一定不最優,但這里是為了解決總時間長度為奇數時若干個1和-1不能使最終疲勞度為0的矛盾)
2.走一步
3.休息到疲勞度為0.
初始狀態時所有f[i][j]全部為0,可以認為是一直在原地休息得到的結果.
我一開始忘了第三種情況必須休息到疲勞度為0WA了一發
改過來之后沒判數組越界RE了一發
老年選手碼力下降怎么如此之快???是人性的扭曲還是道德的淪喪???

#include<cstdio>
#include<cstring>
int f[10005][505];
int d[10005];
inline void gmax(int &a,int b){
if(b>a)a=b;
}
int main(){
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i)scanf("%d",d+i);
for(int i=0;i<n;++i){
gmax(f[i+1][0],f[i][0]);
for(int j=1;j<=m&&i+j<=n;++j){
gmax(f[i+j][0],f[i][j]);
}
for(int j=0;j<m;++j){
gmax(f[i+1][j+1],f[i][j]+d[i+1]);
}
}
printf("%d\n",f[n][0]);
return 0;
}

注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com