poj 3661 running
2013-09-11 14:09
330 查看
题目叙述条件比较多:Bessie参加跑步比赛,每一分钟可以选择跑或者休息,同时给出每一分钟如果跑的话,可以跑的距离:跑的话,疲劳度会加1,对应的分钟可以跑对应的距离;休息的话,疲劳度减1;且疲劳度不可以超过m。跑完后疲劳度必须为0,求满足条件可以跑得最远距离。
我以为动态方程是这样的dp[i][j]=max(dp[i-1][j-1]+a,dp[i-1][j+1]);
但不是,可能是因为。当疲劳度为0时,再继续休息,仍是0。
所以思路整理如下:
dp[i][j] 表示在第 i分钟,疲劳度为 j
的最优子状态,中间的状态转移比较麻烦。
首先,dp[i][j] = dp[ i - 1][ j - 1]
+ a[i] ,if j < m, and j <= i (
每分钟最多可以加1)
其次,dp[i][0] = dp [i - 1][0] 表示第 i
分钟继续休息
也可以由以前的状态休息得来,eg: dp[4][0]<-
dp[3][1],dp[2][2]
dp[i][0] = min (dp[i][0],
dp[ i - j][j] ), j <=
m &&
i - j >= j ( dp[i-j][j]中,i-j不可能<j)
最后结果就是dp
[0]
代码:
#include
<iostream>
#include <cstring>
using namespace std;
int dp[10005][505];
int a[10005];
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int
i,j;
int
n,m;
while(cin>>n>>m)
{
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{
for(j=1;j<=m&&j<=i;j++)
dp[i][j]=dp[i-1][j-1]+a[i];
dp[i][0]=dp[i-1][0];
for(j=1;j<=m&&i-j>=j;j++)
dp[i][0]=max(dp[i-j][j],dp[i][0]);
}
cout<<dp
[0]<<endl;
}
return
0;
}
我以为动态方程是这样的dp[i][j]=max(dp[i-1][j-1]+a,dp[i-1][j+1]);
但不是,可能是因为。当疲劳度为0时,再继续休息,仍是0。
所以思路整理如下:
dp[i][j] 表示在第 i分钟,疲劳度为 j
的最优子状态,中间的状态转移比较麻烦。
首先,dp[i][j] = dp[ i - 1][ j - 1]
+ a[i] ,if j < m, and j <= i (
每分钟最多可以加1)
其次,dp[i][0] = dp [i - 1][0] 表示第 i
分钟继续休息
也可以由以前的状态休息得来,eg: dp[4][0]<-
dp[3][1],dp[2][2]
dp[i][0] = min (dp[i][0],
dp[ i - j][j] ), j <=
m &&
i - j >= j ( dp[i-j][j]中,i-j不可能<j)
最后结果就是dp
[0]
代码:
#include
<iostream>
#include <cstring>
using namespace std;
int dp[10005][505];
int a[10005];
int max(int x,int y)
{
return x>y?x:y;
}
int main()
{
int
i,j;
int
n,m;
while(cin>>n>>m)
{
for(i=1;i<=n;i++)
cin>>a[i];
for(i=1;i<=n;i++)
{
for(j=1;j<=m&&j<=i;j++)
dp[i][j]=dp[i-1][j-1]+a[i];
dp[i][0]=dp[i-1][0];
for(j=1;j<=m&&i-j>=j;j++)
dp[i][0]=max(dp[i-j][j],dp[i][0]);
}
cout<<dp
[0]<<endl;
}
return
0;
}
相关文章推荐
- poj&nbsp;3661&nbsp;Running&nbsp;dp(动态规划)
- ACM: 图论题poj 1860 (没心情复习…
- ACM: 图论题 poj 1062 (邻接矩阵+d…
- ACM: 深搜+剪枝 poj 1416
- ACM: 条件最短路 poj 1724 (没剪枝…
- ACM: 动态规划 poj 1141
- ACM: DP训练好题 动态规划题 poj 1…
- ACM: 简单题 poj 1152 (简单题也wr…
- ACM: 动态规划题 poj 1036 问题简…
- ACM: 树状数组 poj 2155 学习《浅…
- ACM: 动态规划题 poj 1185 想了两…
- ACM: 图论题 poj 3…
- ACM: 二分题 poj 3497
- poj&nbsp;1753&nbsp;flip
- Keep Sites Running Smoothly By Avoiding These 10 Common ASP.NET Pitfalls
- ZZULI_SummerPractice(6) POJ 270…
- POJ 2945 Find the Clones
- POJ-1860-Currency&nbsp;Exchange
- poj&nbsp;1698
- poj&nbsp;1141&nbsp;Brackets&nbsp;Sequence&nbsp;dp