1. 程式人生 > >汽車加油問題 --貪心演算法

汽車加油問題 --貪心演算法

問題描述

  一輛汽車加滿油後可行駛nkm 。旅途中有若干個加油站。設計一個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。

程式設計任務

  對於給定的nk個加油站位置,程式設計計算最少加油次數。

資料輸入

  第1行有2個正整數nk,表示汽車加滿油後可行駛nkm,且旅途有k個加油站。接下來的一行中,有k+1個整數,表示第k個加油站與第k-1個加油站之間的距離。第0個加油站表示出發地,汽車已加滿油。第k+1個加油站表示目的地。

結果輸出

計算出的最少加油次數。如果無法到達目的地,則輸出No Solution”。

演算法實現

假設X[i]表示i-1i號加油站之間的距離,每一次都是加滿油再出發,根據貪心演算法的選擇性質為了要使加油次數最少就會選擇離加滿油的點遠一點的加油站加油。另外當加滿油之後,都要是此後的過程中使加油次數最少。每一次汽車中剩下的油不能再行駛到下一站就在該站加油

.每一次加滿油之後與起點具有相同的條件,可以看做一個新的起點,過程也是相同的。所以說加油次數最少也具有最優子結構的性質。


程式碼實現:

//汽車加油
#include<iostream>
using namespace std;
int main()
{
    int n,k;
    int a[100];
    cin>>n>>k;
    int num=0,s=n;
    for(int i=0;i<=k;i++)
    {
         cin>>a[i];
    }
    for(int i=0;i<=k;i++)
    {
        if(a[i]>n)
         {
             cout<<"No Solution";
             return 0;
         }
         if(s-a[i]>=0)
         {
             s-=a[i];
         }
         else
         {
             num++;
             s=n-a[i];
         }
    }
    cout<<num;
    return 0;
}

樣例: