#include <bits/stdc++.h>
using namespace std;
#define int long long
signed main() {
int n, m;
cin >> n >> m;
vector <vector <int>> a(n + 1, vector <int> (m + 1));
for (int i = 1; i <= n; i ++) {
for (int j = 1; j <= m; j ++) {
cin >> a[i][j];
}
}
int k;
cin >> k;
vector <int> r(n + 1), c(m + 1); int j = 0;
for (int i = 0; i < k; i ++) {
int x, y;
cin >> x >> y;
j = x + 1;
r[x + 1] = 1;
c[y + 1] = 1;
}
vector <int> dp(m + 1);
for (int i = 1; i <= m; i ++) {
if (c[i] == 0) {
dp[i] = max(dp[i], dp[i - 1]);
continue;
}
bool ok = false;
if (i + 1 <= m) {
int s = 0;
if (j - 1 > 0 && j + 1 <= n) {
s = a[j][i] + a[j][i + 1] + a[j - 1][i] + a[j + 1][i];
}
//cout << s << endl;
//cout << dp[i + 1] << endl;
dp[i + 1] = max(dp[i + 1], s + dp[i - 1]);
ok = true;
}
if (i - 1 > 0) {
int s = 0;
if (j - 1 > 0 && j + 1 <= n) {
s = a[j][i] + a[j][i - 1] + a[j - 1][i] + a[j + 1][i];
}
dp[i] = max(dp[i], s + dp[i - 2]);
ok = true;
}
if (i + 1 <= m && i - 1 > 0) {
int s1 = 0, s2 = 0;
if (j - 1 > 0) {
s1 = a[j][i] + a[j][i - 1] + a[j - 1][i] + a[j][i + 1];
}
if (j + 1 <= n) {
s2 = a[j][i] + a[j][i - 1] + a[j + 1][i] + a[j][i + 1];
}
dp[i + 1] = max(dp[i + 1], dp[i - 2] + max(s1, s2));
ok = true;
}
if (!ok) {
cout << "No" << endl;
return 0;
}
}
// for (int i = 1; i <= m; i ++) cout << dp[i] << endl;
cout << dp[m] << endl;
return 0;
}
# | 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... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |