题解:dp
#include <cstdio>
#include <cstring>
#include <cmath>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=10005, M=505;
int f[N][M],n,m,d[N];//第i分钟疲劳为j的跑步距离
int main() {
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>d[i];
for(int i=1;i<=n;i++){
f[i][0]=max(f[i][0],f[i-1][0]);//疲劳值为0时休息
for(int j=1;j<=n;j++) {
f[i][j]=f[i-1][j-1]+d[i];//跑
if(i-j>0) f[i][0]=max(f[i][0],f[i-j][j]);//休息,因为疲劳值要恢复0,所以从f[i-j][j]转移过来
}
}
cout<<f[n][0]<<endl;
return 0;
}