#include "aliens.h"
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define _min(x,y) x = min(x,y)
const int INF = 1e18;
vector<vector<int>> dp;
long long take_photos(signed n, signed m, signed k, std::vector<signed> rw, std::vector<signed> cl) {
dp.assign(n+3, vector<int> (k+3, INF));
vector<array<int,3>> rgs(n);
for (int i=0; i<n; i++){
int l = min(rw[i], cl[i]) + 1; int r = max(rw[i], cl[i]) + 1;
rgs[i] = {l, r, 0};
}
sort(rgs.begin(), rgs.end());
int lastr = -1; vector<array<int,3>> nrgs = {{0,0,0}};
for (int i=0; i<n; i++){
int l = rgs[i][0]; int r = rgs[i][1];
if (r <= lastr) continue;
int area = (r-l+1)*(r-l+1);
if (l <= lastr) area -= (lastr-l+1)*(lastr-l+1);
lastr = r;
nrgs.push_back({l, r, area});
}
rgs = nrgs;
for (int i=1; i<k+3; i++) dp[0][i] = 0;
for (int i=1; i<rgs.size(); i++){
for (int nr = 1; nr <= k; nr++){
int totarea = 0;
for (int lf = i; lf; lf--){
int add_ = rgs[i][1] - rgs[lf][0] + 1; add_*=add_;
add_ -= totarea; add_ -= (rgs[lf][1] - rgs[lf][0] + 1) * (rgs[lf][1] - rgs[lf][0] + 1);
_min(dp[i][nr], dp[lf-1][nr-1] + add_);
totarea += rgs[lf][2];
}
}
for (int nr = 1; nr<=k; nr++) _min(dp[i][nr], dp[i][nr-1]);
}
int totarea = 0;
for (int i=1; i<rgs.size(); i++) totarea += rgs[i][2];
return totarea + dp[rgs.size()-1][k];
}
Compilation message (stderr)
aliens.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
aliens_c.h:1:9: warning: #pragma once in main file
1 | #pragma once
| ^~~~
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |