#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* dp[i][j] = i番目まででj個BANしたときの最大値(jは最後にBANしたのがどれか分かるようにpairを使う) */ int main(){ long long N,K; cin >> N >> K; if (K > (N + 1) / 2){ cout << "Impossible" << "\n"; return 0; } vector A(N); for (int i = 0; i < N; i++){ cin >> A[i]; } vector>> dp(N,vector>(52,{0,-1})); for (int i = 0; i < N; i++){ for (int j = 0; j <= K; j++){ if (i == 0){ dp[0][1] = make_pair(A[0],0); } else { if (dp[i - 1][j].second == i - 1){ dp[i][j] = dp[i - 1][j]; } else { if (A[i] > 0){ dp[i][j + 1].first = dp[i - 1][j].first + A[i]; dp[i][j + 1].second = i; } else { dp[i][j] = dp[i - 1][j]; } } } } } cout << dp[N - 1][K].first << "\n"; return 0; }