#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; typedef long long int ll; typedef pair P; const int INF=1e9; int main() { int n, m; cin>>n>>m; int w[3001]; for(int i=0; i>w[i]; int dp[2][3001][3001]; for(int i=0; i-INF){ dp[0][i+1][j]=max(dp[0][i][j], dp[0][i+1][j]); if(j+1<=m) dp[1][i+1][j+1]=max(dp[0][i][j], dp[1][i+1][j+1]); } if(dp[1][i][j]>-INF){ dp[0][i+1][j]=max(dp[1][i][j], dp[0][i+1][j]); if(j+1<=m) dp[1][i+1][j+1]=max(dp[1][i][j]+w[i], dp[1][i+1][j+1]); } } } int ans=max(dp[0][n-1][m], dp[1][n-1][m]+w[n-1]); for(int i=0; i-INF){ dp[0][i+1][j]=max(dp[0][i][j], dp[0][i+1][j]); if(j+1<=m) dp[1][i+1][j+1]=max(dp[0][i][j], dp[1][i+1][j+1]); } if(dp[1][i][j]>-INF){ dp[0][i+1][j]=max(dp[1][i][j], dp[0][i+1][j]); if(j+1<=m) dp[1][i+1][j+1]=max(dp[1][i][j]+w[i], dp[1][i+1][j+1]); } } } ans=max({ans, dp[0][n-1][m], dp[1][n-1][m]}); cout<