汽車加油問題


汽車加油問題

Time Limit: 1000 ms Memory Limit: 65536 KiB
 

Problem Description

一輛汽車加滿油后可行駛n公里。旅途中有若干個加油站。設計一個有效算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明算法能產生一個最優解。
對於給定的n和k個加油站位置,計算最少加油次數。

Input

輸入數據的第一行有2 個正整數n和k(n≤5000,k≤1000),表示汽車加滿油后可行駛n公里,且旅途中有k個加油站。接下來的1 行中,有k+1 個整數,表示第k個加油站與第k-1 個加油站之間的距離。第0 個加油站表示出發地,汽車已加滿油。第k+1 個加油站表示目的地。

Output

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

Sample Input

7 7
1 2 3 4 5 1 6 6

Sample Output

4

Hint

Source

 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main()
 4 {
 5     int n,k;//n 表示 行駛n 公里,k 表示  k個加油站 ,  k+1 個 行駛距離
 6     int data[1001];//加油站 之間的距離
 7     int flag=1;//標記是否可以到達   flag=1 代表可達
 8     int num=0;//記錄 加油的 次數
 9     cin>>n>>k;
10     for(int i=0;i<=k;i++)  cin>>data[i];
11     int rest=n;//剩余油量  0 站  充滿
12     for(int i=0;i<=k;i++){
13         if(n<data[i]){//滿油狀態下無法 達到下一個 加油站,可以返回了
14             flag=0;//標記不可到達
15             break;
16         }
17         if(rest-data[i]>=0){//剩余油量 行駛data[i]公里 ,仍然有剩余
18             rest-=data[i];//減去行駛的油量,繼續
19         }else{//當前剩余的油量  行駛 data[i]公里 到達不了 下一個 加油站
20             rest=n;//到達不了 ,則在當前加油站 加滿油量
21             rest-=data[i];//然后 行駛 data[i]公里 ,剩余 油量 繼續減去
22             num++;//記錄加油的次數
23         }
24     }
25     if(flag==1) cout<<num<<endl;
26     else cout<<"No Solution!"<<endl;
27     return 0;
28 }

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM