#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=4000;
int n,b,f[2][N][2],u[N];
int dp1(int n,int b) {
memset(f,0xcf,sizeof(f));
f[0][0][0]=0,f[1][1][1]=0;
for(int i=1; i<=n; ++i)
for(int j=1; j<=i&&j<=b; ++j) {
f[i&1][j][0]=max(f[(i-1)&1][j][0],f[(i-1)&1][j][1]);
f[i&1][j][1]=max(f[(i-1)&1][j-1][0],f[(i-1)&1][j-1][1]+u[i]);
}
return max(f[n&1][b][0],f[n&1][b][1]);
}
int dp2(int n,int b) {
memset(f,0xcf,sizeof(f));
f[0][0][0]=0,f[1][1][1]=u[1];
for(int i=2; i<=n; ++i)
for(int j=1; j<=i&&j<=b; ++j) {
f[i&1][j][0]=max(f[(i-1)&1][j][0],f[(i-1)&1][j][1]);
f[i&1][j][1]=max(f[(i-1)&1][j-1][0],f[(i-1)&1][j-1][1]+u[i]);
}
return f[n&1][b][1];
}
int main() {
cin>>n>>b;
for(int i=1; i<=n; ++i) cin>>u[i];
cout<<max(dp1(n,b),dp2(n,b));
return 0;
}
Wrong Answer, #1、#5、#13。