看数据范围,转移就模拟一下决策就好,水题。。
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
#include<algorithm>
#include<cctype>
using namespace std;
int n,m;
int dp[10005][505];
int d[10005];
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=1;j<=m;j++) dp[i][j]=dp[i-1][j-1]+d[i];//run
dp[i][0]=dp[i-1][0];
for (int j=1;j<=m;j++)
if (i>j)
dp[i][0]=max(dp[i-j][j],dp[i][0]);
}
printf("%d",dp[n][0]);
return 0;
}