#include #define rep(i,n) for (int i = 0; i < (n); i++) using namespace std; using ll = long long; using LI = pair; int main(){ int n, m; cin>>n>>m; vector> dp(n+1, vector
  • (m+1, LI(LLONG_MIN/3, -1))); dp[0][0]=LI(0, -1); auto udp=[](LI &a, LI b){ a=max(a, b); }; rep(i, n){ int a; cin>>a; rep(j, m+1) udp(dp[i+1][j], LI(dp[i][j].first+(j%2==0?a:(-a)), j)); rep(j, m) udp(dp[i+1][j+1], LI(dp[i][j].first+((j+1)%2==0?a:(-a)), j)); } LI mx(LLONG_MIN, -1); rep(j, m+1) mx=max(mx, LI(dp[n][j].first, j)); int j=mx.second; vector ans; for(int i=n; i>=1; i--){ if(j!=dp[i][j].second){ j=dp[i][j].second; ans.push_back(i-1); if(j==0) break; } } reverse(ans.begin(), ans.end()); while(ans.size()