加油站问题,一辆车在每个加油站可以加一定数量的油,邮箱容量没有上限,走一个单位的路程消耗一个单位的油量,问汽车是否能够到达终点,如果可以,最少加几次油?
从这个角度思考问题较方便:
当汽车经过某个加油站时,只把油装在车上,并不加入油箱。等到油箱为空时再加油,与在加油站加油的效果一致。(《挑战程序竞赛》第二版的说法为获得一次加油的机会)
所以当油箱用尽时,选择最大的那桶油来加入邮箱便可。
XCODE C++代码如下:
//
// 074_expedition.cpp
// changlle
//
// Created by user on 12/29/15.
// Copyright (c) 2015 user. All rights reserved.
//
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
int N=4;
int L=25;
int P=10;
int A[4]={10,14,20,21};
int B[4]={10,5,2,4};
int main() {
int tank=P;
priority_queue<int> que;
que.push(0);
int D[4];
D[0]=A[0];
for (int i=1;i<4;i++)
D[i]=A[i]-A[i-1];