Untitled
unknown
c_cpp
a year ago
1.3 kB
6
Indexable
#include <vector> #include <limits> int getMinTotalDistance(vector<int> dist_centers) { int n = dist_centers.size(); // dp[i][j] represents the minimum total distance when considering // the first i distribution centers and placing j warehouses vector<vector<int>> dp(n + 1, vector<int>(3, numeric_limits<int>::max())); // Base case: 0 distribution centers dp[0][0] = 0; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= 2; ++j) { for (int k = 0; k < i; ++k) { // Try placing j-th warehouse at dist_centers[k] int cost = 0; for (int m = 0; m < i; ++m) { // Calculate distance to the nearest warehouse if (j == 1 || abs(dist_centers[m] - dist_centers[k]) < abs(dist_centers[m] - dist_centers[i-1])) { cost += abs(dist_centers[m] - dist_centers[k]); } else { cost += abs(dist_centers[m] - dist_centers[i-1]); } } if (k == 0) { dp[i][j] = min(dp[i][j], cost); } else { dp[i][j] = min(dp[i][j], dp[k][j-1] + cost); } } } } return dp[n][2]; }
Editor is loading...
Leave a Comment