题解 | 牛舍安排问题
牛舍安排问题
https://www.nowcoder.com/practice/b56eb97b8b5941d3a14cd4ce7238f502
- 二维动态规划。
- 难题。
import java.util.*; public class Solution { public int minTotalDistance (int[] houses, int k) { final int n = houses.length; int[][] f = new int[n][k + 1]; Arrays.sort(houses); for (int i = 0; i < n; ++i) { for (int j = 0; j < k + 1; ++j) { if (i == 0 || j == 0 || j >= i + 1) { f[i][j] = 0; } else if (j == 1) { f[i][j] = houses[i] - houses[0]; } else { int min = houses[n - 1] * n; for (int x = 0; x < i; ++x) { min = Math.min(min, f[x][j - 1] + Math.abs(houses[x+1] - houses[i])); } f[i][j] = min; } } } return f[n-1][k]; } }