思路: 先以1~n为一天DP一次
再以2~n,1为一天DP一次
不知为何WA,求大佬解答orz
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int MAXN=4005;
ll n,m,a[MAXN],f[MAXN][2],ans,tmp;
int main(){
memset(f,-0x3f,sizeof(f));
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
f[0][0]=0;
for(int i=1;i<=n;i++){
for(int j=m;j>=0;j--){
f[j][0]=max(f[j][0],f[j][1]);
if(j)f[j][1]=max(f[j-1][0],f[j-1][1]+a[i]);
}
}
ans=max(f[m][0],f[m][1]);
memset(f,-0x3f,sizeof(f));
tmp=a[1];
for(int i=1;i<n;i++)a[i]=a[i+1];
a[n]=tmp;
f[0][0]=0;
for(int i=1;i<=n;i++){
for(int j=m;j>=0;j--){
f[j][0]=max(f[j][0],f[j][1]);
if(j)f[j][1]=max(f[j-1][0],f[j-1][1]+a[i]);
}
}
cout<<max(ans,max(f[m][0],f[m][1]));
return 0;
}