poj 3661——Running
来源:互联网 发布:三星clx3305清零软件 编辑:程序博客网 时间:2024/06/04 00:26
题意:一个人跑步,每一分钟如果跑疲劳值就会加一,如果休息疲劳值就会减一,每次只要休息就必须把疲劳值变成0才能继续跑。每分钟有对应的可以跑多远,最后一分钟的时候疲劳值必须是0.求最远能跑多远
思路:状态dp[i][j][k],i表示当前是第几分钟,j表示休息还是跑,k表示当前疲劳值。dp[i][0][e]=dp[i-1][0][e-1]+dis,当e是1的时候可以从dp[i-1][1][0]中得到这个状态。
dp[i][1][e]=dp[i-1][1][e+1]和dp[i-1][0][e+1]中的最大值得到。另外,当e为0时dp[i][1][e]也可以从dp[i-1][1][j]得到。
代码如下:
#include<cstdio>#include<iostream>#include<cstring>using namespace std;int dp[2][2][505];int main(){// freopen("data.txt","r",stdin); int n,m; scanf("%d%d",&n,&m); memset(dp,-1,sizeof(dp)); dp[1][1][0]=0; dp[0][1][0]=0; for(int i=0;i<n;++i) { int dis; scanf("%d",&dis); int now=i&1; memset(dp[now],-1,sizeof(dp[now])); dp[now][1][0]=0; int top=min(m,i+1); for(int j=0;j<=top;++j) { if(j-1>=0) { if(dp[!now][0][j-1]!=-1) dp[now][0][j]=dp[!now][0][j-1]+dis; if(j==1&&dp[!now][1][0]!=-1) dp[now][0][j]=max(dp[now][0][j],dp[!now][1][0]+dis); } if(j+1<=top&&dp[!now][1][j+1]!=-1) { dp[now][1][j]=dp[!now][1][j+1]; } dp[now][1][j]=max(dp[now][1][j],dp[!now][0][j+1]); dp[now][1][j]=max(dp[now][1][j],dp[!now][1][j]); } dp[now][1][top-1]=max(dp[now][1][top-1],dp[!now][0][top]); } printf("%d\n",max(dp[(n-1)&1][1][0],dp[(n-1)&1][0][0])); return 0;}
0 0
- poj 3661——Running
- POJ 3661 —— Running
- POJ 3661 Running
- poj 3661 Running
- POJ 3661 Running (DP)
- poj 3661 Running DP
- poj 3661 Running (dp)
- poj 3661 Running dp
- [dp] poj 3661 Running
- poj 3661 Running
- poj 3661 dp(Running)
- Running (poj 3661)
- POJ 3661 Running(dp)
- POJ-3661 Running(dp)
- poj 3661 running
- poj 3661 Running (区间DP)
- POJ 3661-Running(DP)
- poj 3661 Running(dp)
- 1006. Sign In and Sign Out (25)
- Bootstraphero网站搜集了大量关于Bootstrap的开发资源
- LeetCode题目5:Insertion Sort List
- IOS7如何获取设备唯一标识
- 判断当前是手机还是平板
- poj 3661——Running
- 文件操作小结(C语言版)
- URIEncoding意义
- 暴力-Birthday Cake
- spring mvc 接收json、xml 数据格式,自动解析成对象
- Linux中文件查找方法大全
- getAttribute()方法与getParameter()区别
- Java常见错误列表
- HEVC 常用之 类TComDataCU分析