Submission #1213162

#TimeUsernameProblemLanguageResultExecution timeMemory
1213162AvianshSoccer Stadium (IOI23_soccer)C++20
48 / 100
4548 ms540112 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; const int maxn = 505; int lef[maxn][maxn]; int rig[maxn][maxn]; map<array<int,4>,int>mem; int n; int dp(int t, int b, int l, int r){ if(mem.find({t,b,l,r})!=mem.end()){ return mem[{t,b,l,r}]; } int ans = 0; //add to top. ie to t-1 if(t){ for(int i = l;i<=r;i++){ if(lef[t-1][i]==rig[t-1][i]) continue; int len = min(rig[t-1][i]-1,r)-max(lef[t-1][i]+1,l)+1; ans=max(ans,dp(t-1,b,max(lef[t-1][i]+1,l),min(rig[t-1][i]-1,r))+len); i=rig[t-1][i]; } } if(b<n-1){ for(int i = l;i<=r;i++){ if(lef[b+1][i]==rig[b+1][i]) continue; int len = min(rig[b+1][i]-1,r)-max(lef[b+1][i]+1,l)+1; ans=max(ans,dp(t,b+1,max(lef[b+1][i]+1,l),min(rig[b+1][i]-1,r))+len); i=rig[b+1][i]; } } mem[{t,b,l,r}]=ans; return ans; } int biggest_stadium(int N, vector<vector<int>> F) { n=N; mem.clear(); for(int i = 0;i<n;i++){ int las = -1; for(int j = 0;j<n;j++){ if(F[i][j]) las=j; lef[i][j]=las; } las=n; for(int j = n-1;j>=0;j--){ if(F[i][j]) las=j; rig[i][j]=las; } } int ans = 0; for(int i = 0;i<n;i++){ for(int j = 0;j<n;j++){ if(lef[i][j]==rig[i][j]) continue; ans=max(ans,dp(i,i,lef[i][j]+1,rig[i][j]-1)+rig[i][j]-1-lef[i][j]); } } 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...