Advertisement
tepyotin2

The Cow Run

Jul 7th, 2025
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.25 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 dp[MAX_N][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(dp, 0x3f, sizeof(dp));
  27.  
  28.     for (int i = 1; i <= N; i++) {
  29.         if (cows[i] == 0)
  30.             dp[0][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.         for (int i = 1; i + len <= N + 1; i++) {
  37.             dp[len][i - 1][0] = min(dp[len][i - 1][0], dp[len - 1][i][0] + ccount * (cows[i] - cows[i - 1]));
  38.             dp[len][i - 1][0] = min(dp[len][i - 1][0], dp[len - 1][i][1] + ccount * (cows[i + len - 1] - cows[i - 1]));
  39.  
  40.             dp[len][i][1] = min(dp[len][i][1], dp[len - 1][i][0] + ccount * (cows[i + len] - cows[i]));
  41.             dp[len][i][1] = min(dp[len][i][1], dp[len - 1][i][1] + ccount * (cows[i + len] - cows[i + len - 1]));
  42.         }
  43.     }
  44.  
  45.     cout << min(dp[N-1][1][0], dp[N-1][1][1]) << '\n';
  46.  
  47.     return 0;
  48. }
  49.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement