Advertisement
IanisBelu

GOLD 2013: The Cow Run

Oct 13th, 2024
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.60 KB | Source Code | 0 0
  1. #pragma GCC optimize("O4,unroll-loops")
  2. #include <bits/stdc++.h>
  3.  
  4. using namespace std;
  5.  
  6. #ifndef LOCAL
  7. #define endl '\n'
  8. #endif
  9.  
  10. template<typename T>
  11. bool ckmin(T &a, T b) {
  12.    return a > b ? a = b, true : false;
  13. }
  14.  
  15. using ll = long long;
  16.  
  17. const int NMAX = 1005;
  18. const ll INF = 1e18+5;
  19.  
  20. int n;
  21. int a[NMAX];
  22. ll dp[2][NMAX][NMAX];
  23.  
  24. void read() {
  25.    cin >> n;
  26.    for (int i = 1; i <= n; i++) {
  27.       cin >> a[i];
  28.    }
  29. }
  30.  
  31. ll solve() {
  32.    a[++n] = 0;
  33.    sort(a + 1, a + n + 1);
  34.  
  35.    int john = 0;
  36.    for (int i = 1; i <= n; i++) {
  37.       if (a[i] == 0) {
  38.          john = i;
  39.          break;
  40.       }
  41.    }
  42.  
  43.    for (int i = 1; i <= john; i++) {
  44.       fill(dp[0][i] + john, dp[0][i] + n + 1, INF);
  45.       fill(dp[1][i] + john, dp[1][i] + n + 1, INF);
  46.    }
  47.  
  48.    dp[0][john][john] = dp[1][john][john] = 0;
  49.  
  50.    for (int l = john; l >= 1; l--) {
  51.       for (int r = john; r <= n; r++) {
  52.          ckmin(dp[0][l - 1][r], dp[0][l][r] + 1ll * (a[l] - a[l - 1]) * (n - r + l - 1));
  53.          ckmin(dp[0][l - 1][r], dp[1][l][r] + 1ll * (a[r] - a[l - 1]) * (n - r + l - 1));
  54.          ckmin(dp[1][l][r + 1], dp[0][l][r] + 1ll * (a[r + 1] - a[l]) * (n - r + l - 1));
  55.          ckmin(dp[1][l][r + 1], dp[1][l][r] + 1ll * (a[r + 1] - a[r]) * (n - r + l - 1));
  56.       }
  57.    }
  58.  
  59.    return min(dp[0][1][n], dp[1][1][n]);
  60. }
  61.  
  62. signed main() {
  63. #ifdef LOCAL
  64.    freopen("input.txt", "r", stdin);
  65. #else
  66.    freopen("cowrun.in", "r", stdin);
  67.    freopen("cowrun.out", "w", stdout);
  68. #endif
  69.  
  70.    ios_base::sync_with_stdio(false);
  71.    cin.tie(0);
  72.    cout.tie(0);
  73.  
  74.    read();
  75.    cout << solve() << endl;
  76.  
  77.    return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement