This submission is migrated from previous version of oj.uz, which used different machine for grading. This submission may have different result if resubmitted.
#include "wiring.h"
long long abs (long long x){
if (x > 0) return x;
return -x;
}
long long max (long long a, long long b){
if (a > b) return a;
return b;
}
long long min (long long a, long long b){
if (a > b) return b;
return a;
}
long long min_total_length(std::vector<int> r, std::vector<int> b) {
int n, m;
n = r.size();
m = b.size();
if (r[n-1] < b[0]){
long long ans = 0;
for (int i=0; i<n; i++){
ans += r[n-1] - r[i];
}
for (int i=0; i<m; i++){
ans += b[i] - b[0];
}
ans += max(n, m) *(b[0] - r[n-1]);
return ans;
}
long long DP[n][m];
DP[0][0] = b[0] - r[0];
for (int i=0; i<n; i++){
for (int j=0; j<m; j++){
if (i == 0 && j == 0) continue;
if (i == 0){
DP[i][j] = DP[i][j-1] + abs(r[i] - b[j]);
continue;
}
if (j == 0){
DP[i][j] = DP[i-1][j] + abs(r[i] - b[j]);
continue;
}
DP[i][j] = min(min(DP[i-1][j], DP[i][j-1]), DP[i-1][j-1]) + abs(r[i] - b[j]);
}
}
return DP[n-1][m-1];
}
# | 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... |