# | Submission time | Handle | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1011127 | 2024-06-29T21:25:18 Z | Roman70 | Wiring (IOI17_wiring) | C++17 | 0 ms | 0 KB |
#include <vector> #include <algorithm> #include <climits> #include <cmath> using namespace std; int64_t min_total_length(const vector<int>& r, const vector<int>& b) { int n = r.size(); int m = b.size(); // DP table initialized to large values vector<vector<int64_t>> dp(n + 1, vector<int64_t>(m + 1, LLONG_MAX)); // Base case: no points, no wires dp[0][0] = 0; // Fill the DP table for (int i = 0; i <= n; ++i) { for (int j = 0; j <= m; ++j) { if (i > 0 && j > 0) { dp[i][j] = min(dp[i][j], dp[i-1][j-1] + abs(r[i-1] - b[j-1])); } if (i > 0) { dp[i][j] = min(dp[i][j], dp[i-1][j] + abs(r[i-1] - b[j-1])); } if (j > 0) { dp[i][j] = min(dp[i][j], dp[i][j-1] + abs(r[i-1] - b[j-1])); } } } return dp[n][m]; }