Submission #148960

#TimeUsernameProblemLanguageResultExecution timeMemory
148960Little Piplup (#200)Crosses on the Grid (FXCUP4_cross)C++17
8 / 100
122 ms81920 KiB
#include "cross.h" typedef std::pair<long long, long long> pii; pii dp[202020][25]; long long crossSize(int inner, int outer) { long long ins = inner; long long outs = outer; return (2*ins*outs-ins*ins); } bool betterpick(pii &a, pii &b) { if (crossSize(a.first,a.second) < crossSize(b.first,b.second)) return true; else return false; } pii insertion(pii src, pii dest) { pii ans; ans = dest; ans.first = std::min(ans.first,src.first); ans.second = std::min(ans.second,src.second); return ans; } long long SelectCross(int K, std::vector<int> I, std::vector<int> O) { int N = I.size(); long long ans = 0; dp[0][1] = pii(I[0],O[0]); for (int i = 1; i<N; i++) { pii newp = pii(I[i],O[i]); if (betterpick(dp[i-1][1],newp)) { dp[i][1] = newp; } else dp[i][1] = dp[i-1][1]; } for (int x = 2; x<=K; x++) { for (int i = x-1; i<N; i++) { pii newp = dp[i-1][x-1]; pii cur = pii(I[i],O[i]); newp = insertion(cur,newp); if (betterpick(dp[i-1][x],newp)) dp[i][x] = newp; else dp[i][x] = dp[i-1][x]; } } for (int i = 0; i<N; i++) { ans = std::max(ans,crossSize(dp[i][K].first,dp[i][K].second)); } return ans; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...