This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "soccer.h"
#include <bits/stdc++.h>
using namespace std;
const int maxn = 31;
int dp[maxn][maxn][maxn][2], a[maxn][maxn], pref[maxn][maxn];
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];
}
int ans = 0;
for (int i = 1; i <= N; i ++)
{
for (int j = 1; j <= N; j ++)
{
for (int k = j; k <= N; k ++)
{
if (a[i][k] == 1)
break;
/**int i = 1;
int j = 2;
int k = 5;*/
for (int d = 1; d <= N; d ++)
for (int f = 1; f <= N; f ++)
for (int z = 1; z <= N; z ++)
dp[d][f][z][0] = dp[d][f][z][1] = 0;
dp[i][j][k][0] = k - j + 1;
dp[i][j][k][1] = k - j + 1;
for (int len = 1; len <= N; len ++)
for (int f = 1; f <= N - len + 1; f ++)
{
int z = f + len - 1;
dp[i][f][z][0] = max(dp[i][f][z][0], dp[i][f + 1][z][0]);
dp[i][f][z][0] = max(dp[i][f][z][0], dp[i][f][z - 1][0]);
}
for (int len = N; len > 0; len --)
for (int f = 1; f <= N - len + 1; f ++)
{
int z = f + len - 1;
dp[i][f][z][1] = max(dp[i][f][z][1], dp[i][f - 1][z][1]);
dp[i][f][z][1] = max(dp[i][f][z][1], dp[i][f][z + 1][1]);
}
ans = max(ans, dp[i][j][k][0]);
///cout << "stop " << ans << endl;
for (int d = i + 1; d <= N; d ++)
{
for (int f = 1; f <= N; f ++)
for (int z = f; z <= N; z ++)
{
if (a[d][z] == 1)
break;
if ((f < j && z < k) ||
(f > j && z > k))
continue;
dp[d][f][z][0] = dp[d - 1][f][z][0] + (z - f + 1);
dp[d][f][z][1] = dp[d - 1][f][z][1] + (z - f + 1);
dp[d][f][z][1] = max(dp[d][f][z][1], dp[d][f][z][0]);
ans = max(ans, dp[d][f][z][1]);
///cout << "here " << d << " " << f << " " << z << " " << dp[d][f][z][0] << " " << dp[d][f][z][1] << endl;
}
for (int len = 1; len <= N; len ++)
for (int f = 1; f <= N - len + 1; f ++)
{
int z = f + len - 1;
dp[d][f][z][0] = max(dp[d][f][z][0], dp[d][f + 1][z][0]);
dp[d][f][z][0] = max(dp[d][f][z][0], dp[d][f][z - 1][0]);
}
for (int len = N; len > 0; len --)
for (int f = 1; f <= N - len + 1; f ++)
{
int z = f + len - 1;
dp[d][f][z][1] = max(dp[d][f][z][1], dp[d][f - 1][z][1]);
dp[d][f][z][1] = max(dp[d][f][z][1], dp[d][f][z + 1][1]);
}
}
}
}
}
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... |