Submission #845745

#TimeUsernameProblemLanguageResultExecution timeMemory
845745SortingSoccer Stadium (IOI23_soccer)C++17
30 / 100
4542 ms444 KiB
#include "soccer.h" #include <bits/stdc++.h> using namespace std; const int N = 7; bool f[N][N]; int prefix[N][N]; int n; pair<int, bool> dp[N][N][N][N]; bool bad(int l1, int r1, int l2, int r2){ if(l1 <= l2 && r2 <= r1) return false; if(l2 <= l1 && r1 <= r2) return false; return true; } int solve(int i, int j, int l, int r){ auto &[ans, solved] = dp[i][j][l][r]; if(solved) return ans; ans = 0; if(l != r){ ans = max(ans, solve(i, j, l + 1, r)); ans = max(ans, solve(i, j, l, r - 1)); } if(i != 0){ int sum = 0; for(int k = l; k <= r; ++k) sum += f[i - 1][k]; if(!sum){ ans = max(ans, solve(i - 1, j, l, r) + r - l + 1); } } if(j != n - 1){ int sum = 0; for(int k = l; k <= r; ++k) sum += f[j + 1][k]; if(!sum){ ans = max(ans, solve(i, j + 1, l, r) + r - l + 1); } } return ans; } int biggest_stadium(int _N, std::vector<std::vector<int>> F){ n = _N; for(int i = 0; i < n; ++i) for(int j = 0; j < n; ++j) f[i][j] = F[i][j]; int ans = 0; for(int i = 0; i < n; ++i){ for(int l = 0; l < n; ++l){ for(int r = l; r < n; ++r){ if(f[i][r]) break; ans = max(ans, solve(i, i, l, r) + r - l + 1); } } } return ans; } /* 3 1 1 1 1 1 1 1 1 1 */
#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...