Submission #622820

#TimeUsernameProblemLanguageResultExecution timeMemory
622820AlexandruabcdeAliens (IOI16_aliens)C++14
0 / 100
1 ms212 KiB
#include "aliens.h" #include <bits/stdc++.h> using namespace std; constexpr int NMAX = 1e6 + 5; struct Interval { int st, dr; bool operator < (const Interval &other) const { return (st < other.st || (st == other.st && dr > other.dr)); } }; int N, M, K; Interval V[NMAX]; long long Cost (int a, int b) { return 1LL * (b-a+1) * (b-a+1); } void Comprim () { sort(V+1, V+N+1); vector <Interval> aux; for (int i = 1; i <= N; ++ i ) { if (aux.empty()) { aux.push_back(V[i]); continue; } if (aux.back().dr < V[i].dr) aux.push_back(V[i]); } N = aux.size(); for (int i = 1; i <= N; ++ i ) V[i] = aux[i-1]; } long long dp[4005][4005]; void Solve_Dp () { for (int j = 1; j <= K; ++ j ) { for (int i = 1; i <= N; ++ i ) { if (j == 1) { dp[i][j] = Cost(V[1].st, V[i].dr); continue; } ///iau doar i dp[i][j] = min(dp[i][j], dp[i-1][j-1] + Cost(V[i].st, V[i].dr)); for (int c = i-1; c >= 1; -- c ) { int p = V[c+1].st; int new_capat = V[c].dr; dp[i][j] = min(dp[i][j], dp[c][j-1] + Cost(p, V[i].dr) - (p <= new_capat ? Cost(p, new_capat) : 0)); } } } } long long take_photos(int n, int m, int k, std::vector<int> r, std::vector<int> c) { N = n; M = m; K = k; for (int i = 1; i <= N; ++ i ) { V[i].st = min(r[i-1], c[i-1]); V[i].dr = max(r[i-1], c[i-1]); } Comprim(); Solve_Dp(); return dp[N][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...