#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 500 + 7;
int a[N][N], pref[N][N], dp[N][N][N];
bool ok(int l, int x, int y) {
if (x == 0) return pref[l][y];
return pref[l][y] - pref[l][x - 1] == 0;
}
int biggest_stadium(int n, vector<vector<int>> f) {
for (int i = 1; i <= n; ++i) {
for (int j = 1; j <= n; ++j) {
a[i][j] = f[i - 1][j - 1];
pref[i][j] = pref[i][j - 1] + a[i][j];
}
}
for (int down = 0; down < N; ++down) {
for (int x = 0; x < N; ++x) {
for (int y = x; y < N; ++y) {
dp[down][x][y] = -1e9;
}
}
}
int ans = 0;
for (int h = n; h >= 1; --h) {
for (int l = 1; l + h - 1 <= n; ++l) {
int r = l + h - 1;
for (int i = 1; i <= n; ++i) {
if (!ok(i, l, r)) continue;
int j = i;
while (j < n && ok(j + 1, l, r)) ++j;
dp[i][l][r] = (j - i + 1) * (r - l + 1);
for (int k = i; k <= j; ++k) {
if (!ok(k, l - 1, r)) continue;
int ptr = k;
while (ptr < n && ok(ptr + 1, l - 1, r)) ++ptr;
dp[i][l][r] = max(dp[i][l][r], dp[k][l - 1][r] + ((j - i + 1) - (ptr - k + 1)) * (r - l + 1));
}
for (int k = i; k <= j; ++k) {
if (!ok(k, l, r + 1)) continue;
int ptr = k;
while (ptr < n && ok(ptr + 1, l, r + 1)) ++ptr;
dp[i][l][r] = max(dp[i][l][r], dp[k][l][r + 1] + ((j - i + 1) - (ptr - k + 1)) * (r - l + 1));
}
ans = max(ans, dp[i][l][r]);
i = j;
}
}
}
return ans;
}
# | 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... |