[USACO08JAN]跑步Running
背包dp,这题是tm怎么上绿题的.......
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> using namespace std; int n,m; int d[10005]; int f[10005][505]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) scanf("%d",&d[i]); for(int i=1;i<=n;i++) for(int j=0;j<=m;j++) { if(j==0)f[i][j]=max(f[i-1][j],f[i][j]); else f[i][j]=max(f[i][j],f[i-1][j-1]+d[i]); if(i+j<=n)f[i+j][0]=max(f[i+j][0],f[i][j]); } printf("%d",f[n][0]); return 0; }