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题一道。