Submission #1059995

#TimeUsernameProblemLanguageResultExecution timeMemory
1059995tolbiSoccer Stadium (IOI23_soccer)C++17
48 / 100
4584 ms6256 KiB
#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 timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...