Submission #1213019

#TimeUsernameProblemLanguageResultExecution timeMemory
1213019AvianshSoccer Stadium (IOI23_soccer)C++20
0 / 100
1105 ms2162688 KiB
#include "soccer.h"
#include <bits/stdc++.h>

using namespace std;

int biggest_stadium(int n, vector<vector<int>> F)
{
    int dp[n][n][n][n][n];
    for(int i = 0;i<n;i++){
        for(int j = 0;j<n;j++){
            for(int k = 0;k<n;k++){
                for(int l = 0;l<n;l++){
                    fill(dp[i][j][k][l],dp[i][j][k][l]+n,-1e8);
                }
            }
        }
    }
    //{start point,endpoint,l in curr row, r in curr row, common column
    for(int k = 0;k<n;k++){
        for(int s = 0;s<n;s++){
            //start point s.
            for(int e = s;e<n;e++){
                //end point e
                if(s==e){
                    //base case.
                    for(int l = 0;l<n;l++){
                        for(int r = l;r<n;r++){
                            if(F[s][r]){
                                break;
                            }
                            if(k<l||k>r)
                                continue;
                            dp[s][e][l][r][k]=r-l+1;
                        }
                    }
                    continue;
                }
                for(int l = 0;l<n;l++){
                    for(int r = l;r<n;r++){
                        if(F[e][r])
                            break;
                        if(k<l||k>r)
                            continue;
                        for(int pl = l;pl<=r;pl++){
                            for(int pr = pl;pr<=r;pr++){
                                dp[s][e][l][r][k]=max(dp[s][e][l][r][k],dp[s][e-1][pl][pr][k]+(r-l+1));
                            }
                        }
                    }
                }
            }
            //now end point above s, ie reverse.

            for(int e = s-1;e>=0;e--){
                //end point e
                for(int l = 0;l<n;l++){
                    for(int r = l;r<n;r++){
                        if(F[e][r])
                            break;
                        if(k<l||k>r)
                            continue;
                        for(int pl = l;pl<=r;pl++){
                            for(int pr = pl;pr<=r;pr++){
                                dp[s][e][l][r][k]=max(dp[s][e][l][r][k],dp[s][e+1][pl][pr][k]+(r-l+1));
                            }
                        }
                    }
                }
            }
        }
    }
    int ans = 0;
    for(int k = 0;k<n;k++){
        for(int s = 0;s<n;s++){
            for(int e = s;e<n;e++){
                for(int i = s;i<=e;i++){
                    for(int l = 0;l<n;l++){
                        for(int r = l;r<n;r++){
                            if(k<l||k>r)
                                continue;
                            ans=max(ans,dp[s][i][l][r][k]+dp[e][i][l][r][k]-(r-l+1));
                        }
                    }
                }
            }
        }
    }
    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...