Running贝茜的晨练计划 bzoj-1613 Usaco-2008 Jan
题目大意:题目链接(U组题题意真的是没法概括qwq....)。
注释:略。
想法:一眼dp题。
状态:dp[i][j]表示到达了i时,疲劳值为j的最大运动量。
转移yy,输出dp[n][0]即可。
最后,附上丑陋的代码... ...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int f[10005][505];
int v[10005];
int n,m;
inline char nc() {static char *p1,*p2,buf[100000]; return (p1==p2)&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}
int rd() {int x=0; char c=nc(); while(!isdigit(c)) c=nc(); while(isdigit(c)) x=(x<<3)+(x<<1)+(c^48),c=nc(); return x;}
int main()
{
n=rd(),m=rd();
for(int i=1;i<=n;i++) v[i]=rd();
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
f[i][j]=f[i-1][j-1]+v[i];
if(i+j<=n) f[i+j][0]=max(f[i+j][0],f[i][j]);
}
f[i][0]=max(f[i-1][0],f[i][0]);
}
cout << f[n][0] << endl ;
return 0;
}
小结:有趣的dp题一道。