classSolution{public:intminRefuelStops(inttarget,intstartFuel,vector<vector<int>>&stations){// dp[i] := farthest position we can reach w/ i refuelsvector<long>dp(stations.size()+1);dp[0]=startFuel;for(inti=0;i<stations.size();++i)for(intj=i+1;j>0;--j)if(dp[j-1]>=stations[i][0])// With j - 1 refuels, we can reach stations[i][0]dp[j]=max(dp[j],dp[j-1]+stations[i][1]);for(inti=0;i<dp.size();++i)if(dp[i]>=target)returni;return-1;}};
classSolution{publicintminRefuelStops(inttarget,intstartFuel,int[][]stations){// dp[i] := farthest position we can reach w/ i refuelslongdp[]=newlong[stations.length+1];dp[0]=startFuel;for(inti=0;i<stations.length;++i)for(intj=i+1;j>0;--j)if(dp[j-1]>=stations[i][0])// With j - 1 refuels, we can reach stations[i][0]dp[j]=Math.max(dp[j],dp[j-1]+stations[i][1]);for(inti=0;i<dp.length;++i)if(dp[i]>=target)returni;return-1;}}
classSolution:defminRefuelStops(self,target:int,startFuel:int,stations:List[List[int]])->int:# dp[i] := farthest position we can reach w / i refuelsdp=[startFuel]+[0]*len(stations)fori,stationinenumerate(stations):forjinrange(i+1,0,-1):ifdp[j-1]>=station[0]:# With j - 1 refuels, we can reach stations[i][0]dp[j]=max(dp[j],dp[j-1]+station[1])fori,dinenumerate(dp):ifd>=target:returnireturn-1