社区讨论

WA on 29求条

CF2194EThe Turtle Strikes Back参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mlkxt8xv
此快照首次捕获于
2026/02/13 21:42
6 天前
此快照最后确认于
2026/02/13 21:47
6 天前
查看原帖
CPP
#include <bits/stdc++.h>
#define int long long

using namespace std;

const int kMaxN = 1e6 + 5;

int T, n, m;
vector<int> f[kMaxN], g[kMaxN], a[kMaxN];

struct Node {
  int mx = -1e18, mx2 = -1e18, p;
  void Init() { mx = mx2 = -1e18; }
  void Record(int x, int pos) {
    if (x >= mx) {
      mx2 = mx, mx = x, p = pos;
    } else if (x > mx2)
      mx2 = x;
  }
  int Q(int pos) {
    return (p != pos ? mx : mx2);
  }
} mx[2 * kMaxN];

signed main() {
  cin.tie(0)->ios::sync_with_stdio(0);
  for (cin >> T; T--;) {
    cin >> n >> m;
    for (int i = 0; i <= n + 1; i++) {
      f[i].resize(m + 2, -1e18);
      g[i].resize(m + 2, -1e18);
      a[i].resize(m + 2, 0);
    }
    for (int i = 1; i <= n + m; i++) mx[i].Init();
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        cin >> a[i][j];
        if (i == 1 && j == 1) {
          f[i][j] = a[i][j];
          continue;
        }
        f[i][j] = max(f[i - 1][j], f[i][j - 1]) + a[i][j];
      }
    }
    for (int i = n; i; i--) {
      for (int j = m; j; j--) {
        if (i == n && j == m) {
          g[i][j] = a[i][j];
          continue;
        }
        g[i][j] = max(g[i + 1][j], g[i][j + 1]) + a[i][j];
      }
    }
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        mx[i + j].Record(f[i][j] + g[i][j] - a[i][j], i);
        // cout << f[i][j] << ' ';
      }
      // cout << '\n';
    }
    int mn = 1e18;
    for (int i = 1; i <= n; i++) {
      for (int j = 1; j <= m; j++) {
        // cout << mx[i + j].Q(i) << ' ';
        mn = min(mn, max(f[i][j] + g[i][j] - 3 * a[i][j], mx[i + j].Q(i)));
      }
      // cout << '\n';
    }
    cout << mn << '\n';
  }
}

回复

0 条回复,欢迎继续交流。

正在加载回复...