QOJ.ac

QOJ

IDSubmission IDProblemHackerOwnerResultSubmit timeJudge time
#1515#882534#9879. ReTravelrbtreeguosounFailed.2025-02-05 09:08:092025-02-05 09:08:09

Details

Extra Test:

Accepted
time: 0ms
memory: 3584kb

input:

3
4 3
4 3
4 3

output:

7

result:

ok "7"

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#882534#9879. ReTravelguosounAC ✓77ms7296kbC++171.1kb2025-02-05 09:01:582025-02-05 09:01:59

answer

#include <bits/stdc++.h>
template <class T>
void chkmin(T &x, const T &y) {
  if (x > y) x = y;
}
template <class T>
using V = std::vector<T>;
using ll = long long;

int main() {
  std::cin.tie(0)->sync_with_stdio(0);
  int n;
  std::cin >> n;
  V<int> x(n), y(n);
  V<V<int>> mix(n, V<int>(n, 1e9)), miy = mix;
  for (int i = 0; i < n; i++) std::cin >> x[i] >> y[i];
  for (int i = 0; i < n; i++) {
    mix[i][i] = x[i], miy[i][i] = y[i];
    for (int j = i + 1; j < n; j++) {
      mix[i][j] = std::min(mix[i][j - 1], x[j]);
      miy[i][j] = std::min(miy[i][j - 1], y[j]);
    }
  }
  V<V<ll>> dp(n, V<ll>(n));
  for (int l = n - 1; l >= 0; l--)
    for (int r = l; r < n; r++)
      if (l == r) dp[l][r] = 0;
      else {
        dp[l][r] = 1e18;
        int x1 = mix[l][r], y1 = miy[l][r];
        for (int k = l; k < r; k++) {
          int x2 = mix[l][k], y2 = miy[l][k];
          int x3 = mix[k + 1][r], y3 = miy[k + 1][r];
          chkmin(dp[l][r], dp[l][k] + dp[k + 1][r] + x2 - x1 + y2 - y1 + x3 - x1 + y3 - y1);         
        }
      }
  std::cout << dp[0][n - 1] + mix[0][n - 1] + miy[0][n - 1] << '\n';
}