#include "wiring.h"
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
template<class T>void minimize(T& a, T b){
if(a > b){
a = b;
}
}
const ll INF = 1e18;
ll min_total_length(vector<int>r, vector<int>b){
ll ans = 0;
int n = r.size(), m = b.size();
if(n <= 200 && m <= 200){
vector<vector<ll>>dp(n + 1, vector<ll>(m + 1, INF));
dp[n][m] = dp[n][m - 1] = dp[n - 1][m] = 0;
for(int i = n - 1; i > -1; i--){
for(int j = m - 1; j > -1; j--){
dp[i][j] = dp[i + 1][j + 1] + abs(r[i] - b[j]);
for(int k = n - 1; k > i; k--){
minimize(dp[i][j], dp[i][j + 1] + abs(r[k] - b[j]));
}
for(int k = m - 1; k > j; k--){
minimize(dp[i][j], dp[i + 1][j] + abs(r[i] - b[k]));
}
}
}
return dp[0][0];
}
else if(r.back() < b[0]){
int i = r.size(), j = b.size();
while(i > 0 && j > 0){
ans += b[--j] - r[--i];
}
while(i > 0){
ans += b[0] - r[--i];
}
while(j > 0){
ans += b[--j] - r.back();
}
}
return ans;
}
# | 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... |