제출 #135533

#제출 시각아이디문제언어결과실행 시간메모리
135533random0029Aliens (IOI16_aliens)C++14
25 / 100
171 ms12668 KiB
// ItnoE #include<bits/stdc++.h> using namespace std; typedef long long ll; const int N = 505, MXM = 1e6 + 10; int n, m, A[N], B[N], MN[MXM]; ll dp[N][N]; inline ll SQR(ll a) {return (a * a);} int64_t take_photos(int q, int mm, int k, vector < int > RG, vector < int > CG) { m = mm; memset(MN, 63, sizeof(MN)); for (int i = 0; i < q; i ++) { if (RG[i] > CG[i]) swap(RG[i], CG[i]); MN[CG[i]] = min(MN[CG[i]], RG[i]); } for (int i = 0; i < m; i ++) if (MN[i] <= i) { int b = i, a = i - MN[i] + 1; while (n && B[n] - A[n] >= b - a) n --; n ++; B[n] = b; A[n] = a; } memset(dp, 63, sizeof(dp)); dp[0][0] = 0; for (int j = 1; j <= k; j ++) { for (int i = 1; i <= n; i ++) { dp[j][i] = dp[j - 1][i]; for (int h = 1; h <= i; h ++) { ll vl = dp[j - 1][h - 1]; vl += SQR(B[i] - B[h] + A[h]); if (h > 1 && B[h - 1] > B[h] - A[h]) vl -= SQR(B[h - 1] - (B[h] - A[h])); dp[j][i] = min(dp[j][i], vl); } } } return (dp[k][n]); } /*int main() { int q = 2; int mm = 6; int k = 2; vector < int > _R = {1, 4}; vector < int > _C = {4, 1}; ll Res = take_photos(q, mm, k, _R, _C); cout << Res << endl; }*/
#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...