汽車從起點出發駛向目的地,該目的地位於出發位置東面target
英里處。
沿途有加油站,每個station[i]
代表乙個加油站,它位於出發位置東面station[i][0]
英里處,並且有station[i][1]
公升汽油。
假設汽車油箱的容量是無限的,其中最初有startfuel
公升燃料。它每行駛 1 英里就會用掉 1 公升汽油。
當汽車到達加油站時,它可能停下來加油,將所有汽油從加油站轉移到汽車中。
為了到達目的地,汽車所必要的最低加油次數是多少?如果無法到達目的地,則返回-1
。
注意:如果汽車到達加油站時剩餘燃料為 0,它仍然可以在那裡加油。如果汽車到達目的地時剩餘燃料為 0,仍然認為它已經到達目的地。
輸入:target = 1, startfuel = 1, stations =輸出:0
解釋:我們可以在不加油的情況下到達目的地。
輸入:target = 100, startfuel = 1, stations = [[10,100]]輸出:-1
解釋:我們無法抵達目的地,甚至無法到達第乙個加油站。
輸入:target = 100, startfuel = 10, stations = [[10,60],[20,30],[30,30],[60,40]]輸出:2
解釋:我們出發時有 10 公升燃料。
我們開車來到距起點 10 英里處的加油站,消耗 10 公升燃料。將汽油從 0 公升加到 60 公升。
然後,我們從 10 英里處的加油站開到 60 英里處的加油站(消耗 50 公升燃料),
並將汽油從 10 公升加到 50 公升。然後我們開車抵達目的地。
我們沿途在1兩個加油站停靠,所以返回 2 。
一開始想的是在每次可以走的最遠的路程所經過的加油站中選擇乙個油量最大的,但是忽略了可能加一次油到不了下一站,或者下下一站。因此需要迴圈找第二大油量,甚至第3,4,5....大的油量
#include#include#include
#include
using
namespace
std;
bool vis[1000
];int go(int maxdis,vector< vector >&stations)
i++;
}if(pos==-1
)
return -1
;
else
}int minrefuelstops(int target, int startfuel, vector< vector >&stations)
//不斷加油直到可以走到
while(i0
])
else
break
; }
if(start+dis>=stations[i][0
])
else
break
; }
if(start+dis>=target)
return
cou;
else
return -1
; }
}int
main()
}
871 最低加油次數
汽車從起點出發駛向目的地,該目的地位於出發位置東面target英里處。沿途有加油站,每個station i 代表乙個加油站,它位於出發位置東面station i 0 英里處,並且有station i 1 公升汽油。假設汽車油箱的容量是無限的,其中最初有startfuel公升燃料。它每行駛 1 英里就...
871 最低加油次數
class solution 如果當前餘下的汽油不足以跑到這個加油站 while curpos gasleft curstationpos 那麼著找出之前加油最多的油來加 把最多的油加上去 gasleft q.top q.pop addgastimes 向前開的過程中肯定存在油量的消耗 const ...
871 最低加油次數
汽車從起點出發駛向目的地,該目的地位於出發位置東面 target 英里處。沿途有加油站,每個 station i 代表乙個加油站,它位於出發位置東面 station i 0 英里處,並且有 station i 1 公升汽油。假設汽車油箱的容量是無限的,其中最初有 startfuel 公升燃料。它每行...