제출 #171613

#제출 시각아이디문제언어결과실행 시간메모리
171613SortingAliens (IOI16_aliens)C++14
12 / 100
179 ms4344 KiB
#include "aliens.h" #include <bits/stdc++.h> using namespace std; const int MAXN = 4007; const long long inf = 1e18; pair<int, int> p[MAXN]; long long dp[MAXN][MAXN]; void init_array(const int &n, const int &m, vector<int> &r, vector<int> &c){ for(int i = 0; i < n; ++i){ if(r[i] > c[i]) swap(r[i], c[i]); p[i] = {r[i], c[i]}; } sort(p, p + n); } long long do_dp(const int &n, const int &m, const int &k){ for(int pos = 0; pos < n; ++pos) dp[0][pos] = inf; dp[0][n] = 0; for(int groups = 1; groups <= k; ++groups){ for(int pos = 0; pos < n; ++pos){ dp[groups][pos] = inf; long long mx = 0; for(int next_pos = pos; next_pos < n; ++next_pos){ mx = max(mx, (long long)p[next_pos].second - p[pos].first + 1); long long curr = mx * mx + dp[groups - 1][next_pos + 1]; if(next_pos + 1 != n && p[next_pos + 1].first <= p[pos].first + mx - 1){ long long diff = p[pos].first + mx - p[next_pos + 1].first; curr -= diff * diff; } dp[groups][pos] = min(dp[groups][pos], curr); } } dp[groups][n] = 0; } return dp[k][0]; } long long take_photos(int n, int m, int k, vector<int> r, vector<int> c){ init_array(n, m, r, c); return do_dp(n, m, k); }
#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...