제출 #915912

#제출 시각아이디문제언어결과실행 시간메모리
915912biank축구 경기장 (IOI23_soccer)C++17
8 / 100
1 ms348 KiB
#include <bits/stdc++.h> using namespace std; #define ALL(x) x.begin(),x.end() #define SIZE(x) (int)x.size() #define forsn(i,s,n) for(int i=int(s);i<int(n);i++) #define forn(i,n) for(int i=0;i<int(n);i++) #define dforsn(i,s,n) for(int i=int(n)-1;i>=int(s);i--) #define dforn(i,n) for(int i=int(n)-1;i>=0;i--) #define fst first #define snd second typedef long long ll; typedef pair<int,int> ii; const int MAXN = 5; int f[MAXN][MAXN]; pair<ll,ii> dp[MAXN][MAXN][MAXN]; int L[MAXN][MAXN], R[MAXN][MAXN]; int n; pair<ll,ii> solve(int l, int r, int p) { if(l>r) return {0LL,{-1,n}}; if(dp[l][r][p].fst!=-1) return dp[l][r][p]; auto calculate = [&](pair<int,ii> prev, int i) { auto [val,range] = prev; int mini = max(range.fst, L[i][p]), maxi = min(range.snd, R[i][p]); return (pair<ll,ii>){val+max(maxi-mini-1,0),{mini,maxi}}; }; return dp[l][r][p] = max(calculate(solve(l+1,r,p),l), calculate(solve(l,r-1,p),r)); } int biggest_stadium(int N, vector<vector<int>> F) { n=N; forn(i,n) forn(j,n) { f[i][j]=F[i][j]; } forn(i,n) forn(j,n) forn(k,n) { dp[i][j][k].fst = -1; } forn(i,n) forn(j,n) { if(f[i][j]==1) L[i][j]=j; else if(j==0) L[i][j]=-1; else L[i][j]=L[i][j-1]; } forn(i,n) dforn(j,n) { if(f[i][j]==1) R[i][j]=j; else if(j==n-1) R[i][j]=n; else R[i][j]=R[i][j+1]; } ll ans = 0LL; forn(i,n) { ll curr = solve(0,n-1,i).fst; ans=max(ans,curr); } return int(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...