https://www.lydsy.com/JudgeOnline/problem.php?id=1613
One Y! beautiful Z Z
A easy problem by DP
you should record the time and fatigue and the status
and DP one by one is just OK!
code of AC:
#include<bits/stdc++.h>
using namespace std;
int A[10100],DP[10100][110][2];
int main(){
int n,m;
cin>>n>>m;
for(int i=1;i<=n;++i){
cin>>A[i];
}
for(int i=1;i<=n;++i){
DP[i][0][0]=max(DP[i-1][1][0],max(DP[i-1][1][1],DP[i-1][0][0]));
DP[i][m][1]=DP[i-1][m-1][1]+A[i];
DP[i][1][1]=DP[i-1][0][0]+A[i];
DP[i][1][0]=max(DP[i-1][2][0],DP[i-1][2][1]);
// cout<<DP[i][0][0]<<" "<<DP[i][0][1]<<" "<<DP[i][1][0]<<" "<<DP[i][1][1]<<" "<<DP[i][2][0]<<" "<<DP[i][2][1]<<endl;
for(int j=2;j<m;++j){
DP[i][j][1]=DP[i-1][j-1][1]+A[i];
DP[i][j][0]=max(DP[i-1][j+1][0],DP[i-1][j+1][1]);
}
}
cout<<DP[n][0][0]<<endl;
}