Advertisement
willy108

snakes

Feb 13th, 2021
208
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.43 KB | None | 0 0
  1. int prefix[max_v], max_val[max_v][max_v], arr[max_v], graph[max_v][max_v], dp[max_v][max_v];
  2. int n, K;
  3.  
  4. /**
  5. dp[i][j] is the min cost to catch all groups of snakes up to points i after changing nets j times
  6. dp[i][j] = min(dp[i][j-1], dp[k][j-1] + graph[k][i]) for all values k < i
  7. prefix[i] = sum of all the elements from index 0 to index i, exclusive
  8. max_val[i][j] = maximum value in the interval i to j, inclusive
  9. graph[i][j] = wasted space in the interval i to j (inclusive) if only 1 size change is used
  10. graph[i][j] = max_val[i][j] * (size of inteval) - (sum of all snake groups in interval)
  11. **/
  12.  
  13.  
  14. int main(){
  15.     freopen("snakes.in", "r", stdin);
  16.     freopen("snakes.out", "w+", stdout);
  17.     scanf("%d%d", &n, &K);
  18.    
  19.     for(int i = 0; i<n; i++){
  20.         scanf("%d", &arr[i]);
  21.         max_val[i][i] = arr[i];
  22.         prefix[i+1] = prefix[i] + arr[i];
  23.     }
  24.    
  25.    
  26.     for(int len = 1; len<n; len++){
  27.         for(int i = 0; i + len < n; i++){
  28.             max_val[i][i + len] = max(max_val[i][i + len - 1], arr[i + len]);
  29.         }
  30.     }
  31.    
  32.     for(int i = 0; i<n; i++){
  33.         for(int j = i; j<n; j++){
  34.             graph[i][j] = (max_val[i][j] * ((j - i) + 1)) - (prefix[j+1] - prefix[i]);
  35.         }
  36.     }
  37.    
  38.     for(int i = 0; i<n; i++){
  39.         dp[i][0] = graph[0][i];
  40.     }
  41.    
  42.     for(int j = 1; j<=K; j++){
  43.         for(int i = 0; i<n; i++){
  44.             int& ans = dp[i][j];
  45.             ans = int_max;
  46.             for(int k = 0; k<i; k++){
  47.                 ans = min(ans, dp[k][j-1] + graph[k+1][i]);
  48.             }
  49.         }
  50.     }
  51.    
  52.     printf("%d", dp[n-1][K]);
  53.    
  54.     return 0;
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement