#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
ll mod = 1e9 + 7;
ll inf = 2000000000;
ll solve(vector<vector<ll>> & matrica, vector<vector<ll>> dpmini, vector<vector<ll>> dpmaxi, ll n) {
ll m = matrica[0].size();
for (ll i = 1; i < n; i++) {
dpmaxi[i][0] = max(dpmaxi[i][0], dpmaxi[i - 1][0] + matrica[i - 1][0] - matrica[i][0] - 1);
dpmini[i][0] = max(dpmini[i][0], dpmini[i - 1][0] - matrica[i - 1][0] + matrica[i][0] - 1);
}
for (ll i = 1; i < m; i++) {
for (ll j = 0; j < n; j++) {
if (j != 0) {
dpmaxi[j][i] = max(dpmaxi[j][i], dpmaxi[j - 1][i] + matrica[j - 1][i] - matrica[j][i] - 1);
dpmini[j][i] = max(dpmini[j][i], dpmini[j - 1][i] - matrica[j - 1][i] + matrica[j][i] - 1);
}
dpmaxi[j][i] = max(dpmaxi[j][i], dpmaxi[j][i - 1] + matrica[j][i - 1] - matrica[j][i] - 1);
dpmini[j][i] = max(dpmini[j][i], dpmini[j][i - 1] - matrica[j][i - 1] + matrica[j][i] - 1);
}
}
ll res = -1;
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
res = max(res, dpmaxi[i][j]);
res = max(res, dpmini[i][j]);
}
}
return res;
}
int main() {
ll n, m;
cin >> n >> m;
vector<vector<ll>>matrica(n, vector<ll>(m));
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
cin >> matrica[i][j];
}
}
vector<vector<ll>>dpmini(n, vector<ll>(m, -1));
vector<vector<ll>>dpmaxi(n, vector<ll>(m, -1));
ll maks1 = solve(matrica, dpmini, dpmaxi, n);
for (ll i = 0; i < n; i++) {
for (ll j = 0; j < m; j++) {
swap(matrica[n - i - 1][j], matrica[i][j]);
}
}
ll maks2 = solve(matrica, dpmini, dpmaxi, n);
cout << max(maks1, maks2) << endl;
}
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |
| # | Verdict | Execution time | Memory | Grader output |
|---|
| Fetching results... |