目标:
给出终点距离与开始油量,以及沿途加油站的距离及可以添加的油量,试给出如果要达到终点,最小加油的次数,如果无法到达,则输出-1
主要思路:
使用背包算法的思想,把加油的次数作为权重,油量作为价值,计算每添加一次加油对于油量最优化的影响。
代码:
1 class Solution { 2 public: 3 int minRefuelStops(int target, int startFuel, vector<vector<int>>& stations) { 4 int fuels[501] = {0}; 5 fuels[0] = startFuel; 6 // 对于每一个油站 7 for (int i = 0; i < stations.size(); i++) { 8 // 考虑添加该油站是否会对油量产生正影响 9 for (int j = i + 1; j > 0; j--) { 10 if (fuels[j - 1] >= stations[i][0]) // 确定当前油量能够到达该油站 11 fuels[j] = fuels[j] < fuels[j - 1] + stations[i][1] ? fuels[j - 1] + stations[i][1] : fuels[j]; 12 } 13 } 14 for (int i = 0; i <= stations.size(); i++) { 15 if (fuels[i] >= target) 16 return i; 17 } 18 return -1; 19 } 20 };