他人方法,个人理解
#include<bits/stdc++.h>
using namespace std;
#define lint long long
int n,m,k;
lint a[5010],d[5010][5010],sum[5010]={0};
int main(){
cin >> n >> m >> k;
for(int i=1;i<=n;i++){
cin >> a[i];
sum[i]=sum[i-1]+a[i]; //前缀和
}
memset(d,0,sizeof(d));
for(int i=1;i<=n;i++){
for(int j=1;j<=k;j++){ //j限制选取数段个数
d[i][j]=d[i-1][j];
if(i>=m){
lint add=d[i-m][j-1]+sum[i]-sum[i-m]; //i为末尾的m个数与i-1为末尾的比较
d[i][j]=max(d[i][j],add);
}
}
}
cout << d[n][k];
return 0;
}