class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param houses int整型vector
* @param k int整型
* @return int整型
*/
int minTotalDistance(vector<int>& houses, int k) {
// write code here
sort(houses.begin(), houses.end());
int n = houses.size();
// 初始化dp数组
vector<vector<int>> dp(n + 1, vector<int>(k + 1, INT_MAX / 2));
dp[0][0] = 0;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= min(i, k); j++) {
for (int p = 0; p < i; p++) {
//在已有分区的情况下,对加入的新牛棚重新按p位置进行分区,重新计算最小值
dp[i][j] = min(dp[i][j], dp[p][j - 1] + houses[i - 1] - houses[p]);
}
}
}
return dp[n][k];
}
};