这道题要我们去一个目的地,给我们几个加油站,最开始拥有的油数量,求去目的地最少加多少次油。
解答:
求最值一般用动态规划。
1 状态 dp[i] 加 i次油最大能到的地方
2 状态转移方程 dp[i + 1] = max(dp[i + 1], dp[i] + arr[i]) arr[i]表示本次加油
3 初始 dp[0] = startFuel
4 结果 求dp[i] >= target 中i最小值
public int minRefuelStops(int target, int startFuel, int[][] stations) {
long[] dp = new long[stations.length + 1];
dp[0] = startFuel;
for (int i = 0; i < stations.length && target > stations[i][0]; i++) {
for (int t = i; t >= 0 && dp[t] >= stations[i][0]; t--) {
dp[t + 1] = Math.max(dp[t + 1], dp[t] + stations[i][1]);
}
}
for (int i = 0; i < dp.length; i++) {
if (dp[i] >= target) {
return i;
}
}
return -1;
}