Submission #1143955

#TimeUsernameProblemLanguageResultExecution timeMemory
1143955gygWiring (IOI17_wiring)C++20
7 / 100
28 ms3608 KiB
#include "wiring.h"
#include <bits/stdc++.h>
using namespace std;
#define sig signed
#define int long long
#define arr array
#define vec vector 
const int N = 2e3 + 5, M = 2e3 + 5, INF = 1e18;

int n, m;
arr<int, N> a;
arr<int, M> b;

arr<arr<int, M>, N> dp;
void dp_cmp() {
	for (int i = 1; i <= n + 1; i++) dp[i].fill(INF);
	dp[n + 1][m + 1] = 0;
	for (int i = n; i >= 1; i--) {
		for (int j = m; j >= 1; j--) {
			int cr = 0;
			for (int k = i; k <= n; k++) {
				cr += abs(a[k] - b[j]);
				dp[i][j] = min(dp[i][j], cr + dp[k + 1][j + 1]);
			}

			cr = 0;
			for (int k = j; k <= m; k++) {
				cr += abs(b[k] - a[i]);
				dp[i][j] = min(dp[i][j], cr + dp[i + 1][k + 1]);
			}
		}
	}
}

int min_total_length(vec<sig> _a, vec<sig> _b) {
	n = _a.size(), m = _b.size();
	for (int i = 1; i <= n; i++) a[i] = _a[i - 1];
	for (int i = 1; i <= m; i++) b[i] = _b[i - 1];

	dp_cmp();
	
	return dp[1][1];
}
#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...