Untitled

 avatar
unknown
c_cpp
10 months ago
1.0 kB
44
Indexable
#include <vector>
#include <algorithm>
#include <climits>

int getMinTotalDistance(vector<int> dist_centers) {
    int n = dist_centers.size();
    
    // Sort the distribution centers
    sort(dist_centers.begin(), dist_centers.end());
    
    // Create a 2D DP table
    vector<vector<int>> dp(n, vector<int>(3, INT_MAX));
    
    // Base case: one warehouse serving all centers
    for (int i = 0; i < n; i++) {
        dp[i][0] = (i > 0 ? dp[i-1][0] : 0) + dist_centers[i] - dist_centers[0];
    }
    
    // Fill the DP table
    for (int k = 1; k < 3; k++) {
        for (int i = 0; i < n; i++) {
            int cost = 0;
            for (int j = i; j >= 0; j--) {
                cost += dist_centers[i] - dist_centers[j];
                if (j > 0) {
                    dp[i][k] = min(dp[i][k], dp[j-1][k-1] + cost);
                } else {
                    dp[i][k] = min(dp[i][k], cost);
                }
            }
        }
    }
    
    // Return the minimum total distance
    return dp[n-1][2];
}
Editor is loading...
Leave a Comment