Advertisement
tepyotin2

The Cow Run Optimized

Jul 7th, 2025
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.30 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int MAX_N = 1005;
  6.  
  7. int N;
  8. int cows[MAX_N];
  9. int best[MAX_N][2], best2[MAX_N][2];
  10.  
  11. int main() {
  12.     ios_base::sync_with_stdio(0), cin.tie(0);
  13.  
  14.     freopen("cowrun.in", "r", stdin);
  15.     freopen("cowrun.out", "w", stdout);
  16.  
  17.     cin >> N;
  18.     for (int i = 1; i <= N; i++) {
  19.         cin >> cows[i];
  20.     }
  21.  
  22.     N += 1;
  23.     cows[N] = 0;
  24.     sort(cows + 1, cows + N + 1);
  25.  
  26.     memset(best, 0x3f, sizeof(best));
  27.  
  28.     for (int i = 1; i <= N; i++) {
  29.         if (cows[i] == 0)
  30.             best[i][0] = 0;
  31.     }
  32.  
  33.     for (int len = 1; len < N; len++) { // 1 ... original N
  34.         int ccount = N - len; // cow count
  35.  
  36.         memset(best2, 0x3f, sizeof(best2));
  37.  
  38.         for (int i = 1; i + len <= N + 1; i++) {
  39.             best2[i - 1][0] = min(best2[i - 1][0], best[i][0] + ccount * (cows[i] - cows[i - 1]));
  40.             best2[i - 1][0] = min(best2[i - 1][0], best[i][1] + ccount * (cows[i + len - 1] - cows[i - 1]));
  41.  
  42.             best2[i][1] = min(best2[i][1], best[i][0] + ccount * (cows[i + len] - cows[i]));
  43.             best2[i][1] = min(best2[i][1], best[i][1] + ccount * (cows[i + len] - cows[i + len - 1]));
  44.         }
  45.  
  46.         memcpy(best, best2, sizeof(best));
  47.     }
  48.  
  49.     cout << min(best[1][0], best[1][1]) << '\n';
  50.  
  51.     return 0;
  52. }
  53.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement