이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#include "wiring.h"
#define DIM 200010
#define INF 2000000000000000000LL
using namespace std;
long long dp[210][210],sp[DIM];
int Size[DIM];
pair <int,int> a[DIM],poz[DIM];
int modul (int n){
return max (n,-n);
}
long long min_total_length(vector<int> r, vector<int> b) {
int i, j, n = 0;
/// impart in grupuri cu elemente de aceasi tip
/// dp[i][j] - costul minim daca ajung la grupul i si primele j elemente din grupul asta\
sunt conectate la grupul anterior
int k = 0;
for (auto it : r)
a[++k] = make_pair(it,0);
for (auto it : b)
a[++k] = make_pair(it,1);
sort (a+1,a+k+1);
i = 1;
while (i <= k){
int j = i, nr = 0;
while (j <= k && a[j].second == a[i].second){
nr++;
j++;
}
Size[++n] = nr;
poz[n] = make_pair(i,i+nr-1);
i = j;
}
for (i=1;i<=n;i++){
for (j=0;j<=Size[i];j++)
dp[i][j] = INF;
}
dp[1][0] = 0;
/// nu stiu cat de bine o sa mearga asta dar n am alta solutie mai buna
for (i=2;i<=n;i++){
int pas = 1;
for (j=poz[i].first;j<=poz[i].second;j++){
sp[pas] = sp[pas-1] + a[j].first;
pas++;
}
long long sum_left = 0;
for (j=Size[i];j>=0;j--){
sum_left = sp[j];
/// fixez cu care pot sa le cuplez din grupul anterior
long long sum_right = 0, mini = dp[i-1][Size[i-1]];
for (k=1;k<=Size[i-1] && j;k++){
mini = min (mini,dp[i-1][Size[i-1]-k]);
sum_right -= a[ poz[i-1].second - k + 1 ].first;
int nr1 = k, nr2 = j; long long val = 0;
if (nr1 < nr2)
val -= 1LL * (nr2 - nr1) * a[ poz[i-1].second ].first;
else val += 1LL * (nr1 - nr2) * a[ poz[i].first ].first;
dp[i][j] = min (dp[i][j],mini + sum_left + sum_right + val);
}
if (!j && dp[i-1][Size[i-1]] != INF)
dp[i][j] = dp[i-1][Size[i-1]];
}
}
return dp[n][Size[n]];
}
컴파일 시 표준 에러 (stderr) 메시지
wiring.cpp:22:5: warning: multi-line comment [-Wcomment]
/// dp[i][j] - costul minim daca ajung la grupul i si primele j elemente din grupul asta\
^
# | 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... |