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;
int biggest_stadium(int N, std::vector<std::vector<int>> F)
{
int ans = 0;
for (int _ = 0; _ < N; _++){
int left[N]={};
int right[N]={};
for (int j = 0; j < N; j++){
for (int i = _+1; i < N; i++){
if (!F[i][j]){
right[j]++;
}
else break;
}
for (int i = _; i >= 0; i--){
if (!F[i][j]){
left[j]++;
}
else break;
}
}
vector<vector<int>> minl(N,vector<int>(N));
vector<vector<int>> minr(N,vector<int>(N));
for (int i = 0; i < N; i++){
minl[i][i]=left[i];
minr[i][i]=right[i];
for (int j = i+1; j < N; j++){
minl[i][j]=min(minl[i][j-1],left[j]);
minr[i][j]=min(minr[i][j-1],right[j]);
}
}
for (int i = 0; i < N; i++){
vector<vector<int>> dp(N,vector<int>(N,-1));
function<int(int,int)> f = [&](int lef, int rig)->int{
if (dp[lef][rig]!=-1) return dp[lef][rig];
dp[lef][rig]=0;
if (i-lef-1>=0){
//leftten al
int cur = minl[i-lef-1][i+rig]+minr[i-lef-1][i+rig];
dp[lef][rig]=max(dp[lef][rig],f(lef+1,rig)+cur);
}
if (i+rig+1<N) {
//righttan al
int cur = minl[i-lef][i+rig+1]+minr[i-lef][i+rig+1];
dp[lef][rig]=max(dp[lef][rig],f(lef,rig+1)+cur);
}
return dp[lef][rig];
};
ans=max(ans,f(0,0)+right[i]+left[i]);
}
}
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... |