Advertisement
Alex_tz307

USACO 2019 US Open Contest, Gold Problem 1. Snakes

Mar 14th, 2021
172
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.90 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define INF 0x3f3f3f3f
  3.  
  4. using namespace std;
  5.  
  6. ifstream fin("snakes.in");
  7. ofstream fout("snakes.out");
  8.  
  9. const int NMAX = 1 << 9;
  10. int N, K, a[NMAX], dp[NMAX][NMAX], sum, pref_max;
  11. /// dp[i][j] - costul minim pentru a captura primele i grupuri cu j schimbari
  12.  
  13. void max_self(int &a, int b) {
  14.     a = max(a, b);
  15. }
  16.  
  17. void min_self(int &a, int b) {
  18.     a = min(a, b);
  19. }
  20.  
  21. int main() {
  22.     fin >> N >> K;
  23.     for(int i = 1; i <= N; ++i) {
  24.         fin >> a[i];
  25.         sum += a[i];
  26.         max_self(pref_max, a[i]);
  27.         dp[i][0] = pref_max * i;
  28.         for(int j = 1; j <= K; ++j) {
  29.             dp[i][j] = INF;
  30.             int mx = a[i];
  31.             for(int prv = i - 1; prv >= 0; --prv) {
  32.                 min_self(dp[i][j], dp[prv][j - 1] + mx * (i - prv));
  33.                 max_self(mx, a[prv]);
  34.             }
  35.         }
  36.     }
  37.     fout << dp[N][K] - sum << '\n';
  38. }
  39.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement