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

4-9 汽車加油問題(貪心演算法)

  • 問題描述:一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計一個有效演算法,指出應
    在哪些加油站停靠加油,使沿途加油次數最少。對於給定的n(n <= 5000)和k(k <= 1000)個加油站位置,程式設計計算最少加油次數。並證明演算法能產生一個最優解。
  • 演算法設計:對於給定的n和k個加油站的位置,計算最少的加油次數。
  • 資料輸入:第一行有兩個正整數n和k,表示汽車加油後可行駛n km,且旅途中有k個加油站。接下來的一行中,有k+1個整數,表示第k個加油站和第k-1個加油站之間的距離。
  • 結果輸出:將計算的最少加油次數輸出,如果無法到達目的地,則輸出“No Solution”。
/*4-9汽車加油問題*/
# include <iostream> # include <malloc.h> using namespace std; void F(int *d, int n, int k) { int num=0; //Record the times of refueling(加油) for (int i=0; i<=k; ++i) if (d[i]>n) { cout <<"No Solution"<<endl; return
; } for (int i=0, s=0; i<=k; ++i) { s+=d[i]; if (s>n) { num++; s=d[i]; } } cout <<num<<endl; } int main() { int n, k, *d; cin >>n>>k; d=(int *)malloc((k+1)*sizeof(int)); for (int
i=0; i<=k; ++i) cin >>d[i]; F(d, n, k); return 0; }