Advertisement
deushiro

Untitled

Dec 2nd, 2019
184
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <cmath>
  4. #include <algorithm>
  5. #include <queue>
  6. #include <map>
  7. #include <set>
  8. #include <bitset>
  9.  
  10. using namespace std;
  11. typedef long long ll;
  12.  
  13. int main() {
  14.     ios_base::sync_with_stdio(false);
  15.     cin.tie(0);
  16.     cout.tie(0);
  17.     ll n, k;
  18.     cin >> n >> k;
  19.     vector<vector<pair<ll, int>>> dp(n, vector<pair<ll, int>>(k, {0, 0}));
  20.     vector<ll> a(n);
  21.     for(int i = 0; i < n; ++i){
  22.         cin >> a[i];
  23.     }
  24.     dp[0][0].first = a[0];
  25.     for(int i = 1; i < n; ++i){
  26.         dp[i][0].first = min(dp[i - 1][0].first, a[i]);
  27.         dp[i][0].second = -1;
  28.     }
  29.     for(int i = 0; i < n; ++i){
  30.         for(int j = 1; j < k; ++j){
  31.             ll c = a[i];
  32.             for(int v = 0; v < i; ++v){
  33.                 c = min(c, a[i - v]);
  34.                 if(dp[i - v - 1][j - 1].first + c >= dp[i][j].first){
  35.                     dp[i][j].first = max(dp[i - v - 1][j - 1].first + c, dp[i][j].first);
  36.                     dp[i][j].second = i - v - 1;
  37.                 }
  38.             }
  39.         }
  40.     }
  41.     cout << dp[n - 1][k - 1].first << "\n";
  42.     int i = n - 1;
  43.     int j = k - 1;
  44.     vector<int> res;
  45.     for(int x = 0; x < k - 1; ++x){
  46.         res.push_back(dp[i][j - x].second + 1);
  47.         i = dp[i][j - x].second;
  48.     }
  49.     for(int i = res.size() - 1; i > -1; --i){
  50.         cout << res[i] << " ";
  51.     }
  52.     cout << endl;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement