Submission #348455

#TimeUsernameProblemLanguageResultExecution timeMemory
348455milleniumEeeeAliens (IOI16_aliens)C++17
0 / 100
2078 ms2412 KiB
#include "aliens.h" //#include "grader.cpp" #include <bits/stdc++.h> #define y1 asdfasdf123 #define ll long long #define szof(s) (int)s.size() using namespace std; const int INF = 0x3f3f3f3f; const int MAXN = 505; const int MAXM = 1005; bool used[155][155]; ll dp[MAXN][MAXN]; int r[MAXN]; int c[MAXN]; int n, m, k; int cost(int left, int right) { int mn = INF; int mx = -INF; for (int i = left; i <= right; i++) { mn = min(mn, r[i]); mx = max(mx, r[i]); } return (mx - mn + 1ll) * (mx - mn + 1ll); } void f(int y1, int x1, int y2, int x2) { for (int i = y1; i <= y2; i++) { for (int j = x1; j <= x2; j++) { used[i][j] = true; } } } int subtask1() { for (int i = 1; i <= n; i++) { int mn = min(r[i], c[i]); int mx = max(r[i], c[i]); f(mn, mn, mx, mx); } long long ans = 0; for (int i = 1; i <= m; i++) { for (int j = 1; j <= m; j++) { if (used[i][j]) { ans++; } } } return ans; } long long take_photos(int N, int M, int K, vector<int> R, vector<int> C) { n = N, m = M, k = K; set <int> st; for (int i = 0; i < n; i++) { st.insert(R[i] + 1); } int p = 1; for (auto el : st) { r[p] = c[p] = el; p++; } n = szof(st); k = min(k, szof(st)); if (n <= 50 && m <= 100 && k == n) { return subtask1(); } memset(dp, INF, sizeof(dp)); dp[0][0] = 0; for (int gr = 1; gr <= k; gr++) { for (int i = 1; i <= n; i++) { for (int j = 0; j < i; j++) { dp[gr][i] = min(dp[gr][i], dp[gr - 1][j] + cost(j + 1, i)); } } } assert(dp[k][n] != INF); return dp[k][n]; }
#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...