首页 > 代码库 > poj 3661 Running dp
poj 3661 Running dp
题意:
有n分钟时间,每分钟牛能跑d[i]路程,在每分钟,牛可以选择跑,这样疲劳度会+1,也可以选择不跑,这样疲劳度会-1(最少到0),问n分钟后疲劳度为0时最多能跑多远,注意牛要疲劳度为0才能继续跑。
分析:
设dp[i][j]表示i分钟结束奶牛疲劳度为j时能跑的最远距离,则转移有:dp[i-1][j-1]->dp[i][j]+d[i],dp[i][j]->dp[i+j][0];
代码:
//poj 3661 //sep9 #include <iostream> using namespace std; const int maxN=10024; int v[maxN]; int dp[maxN][512]; int main() { int i,j,n,m; scanf("%d%d",&n,&m); for(i=1;i<=n;++i) scanf("%d",&v[i]); for(i=0;i<=n;++i) for(j=0;j<=m+1;++j) dp[i][j]=INT_MIN; dp[0][0]=0; for(i=1;i<=n;++i) for(j=0;j<=m;++j){ if(j>0) dp[i][j]=max(dp[i][j],dp[i-1][j-1]+v[i]); if(i+j<=n) dp[i+j][0]=max(dp[i+j][0],dp[i][j]); if(j==0) dp[i][j]=max(dp[i][j],dp[i-1][j]); } printf("%d",dp[n][0]); return 0; }
poj 3661 Running dp
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。