http://poj.org/problem?id=3661
#include<iostream>
#include<cstring>
using namespace std;
int dp[10005][505];//dp[i][j]表示第i分钟疲劳度为j走的最大距离
int a[10005];
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];//第i分钟需要休息
for(j=1; j<=m&&i-j>=j; j++)//i-j>=j表示下面dp[i-j][j]中的时间比疲劳大
dp[i][0]=max(dp[i-j][j],dp[i][0]);
}
cout<<dp[n][0]<<endl;
}
return 0;
}