汽車加油問題
Time Limit: 1000 ms Memory Limit: 65536 KiB
Problem Description
一輛汽車加滿油后可行駛n公里。旅途中有若干個加油站。設計一個有效算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明算法能產生一個最優解。
對於給定的n和k個加油站位置,計算最少加油次數。
對於給定的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 }