汽車加油問題 SDUT OJ 貪心演算法
汽車加油問題
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
Output
4
解題思路:
本題利用貪心演算法,
在當前地點的油量若能夠到達下一加油站,則跳到下一個加油站,
若不能,則在當前地點加滿油,再跳到下一加油站,
每一個 當前地點 都可以當成一個全新的出發點。
#include <iostream>
using namespace std;
/***
本題利用貪心演算法,
在當前地點的油量若能夠到達下一加油站,則跳到下一個加油站,
若不能,則在當前地點加滿油,再跳到下一加油站,
每一個 當前地點 都可以當成一個全新的出發點
***/
int len[1005];///記錄第k個加油站與第k-1個加油站之間的距離
int main()
{
int n, k;///汽車加滿油後可行駛n公里,且旅途中有k個加油站
cin >> n >> k;
for(int i = 0; i < k+1; i++)/// 0 到 k 共 k+1 個數,
///表示第k個加油站與第k-1個加油站之間的距離,
///第0個加油站表示出發地,第k+1個加油站表示目的地
///len[0]表示 第一個加油站 到 第0個加油站(出發地)的距離
///len[k]表示 第k+1個加油站(目的地) 到 第k個加油站的距離(最後一個加油站)
{
cin >> len[i];
}
int residual = n;///汽車剩餘油量,從第0個加油站出發後初始為n
int count = 0;///加油次數
int flag = 1;///標記汽車是否能夠到達目的地,能到達置1,不能到達置0
for(int i = 0; i < k+1; i++)
{
if(n < len[i])
{///如果滿油的車也不能到達下一加油站,則無法到達目的地
flag = 0;
break;
}
if(residual > len[i])
{///如果剩餘的油量能夠到達下一個加油站,則跳到下一個加油站
residual -= len[i];
}
else
{///如果剩餘油量不能到達下一加油站,則先加滿油再到達下一加油站
residual = n;
residual -= len[i];
count++;///加油次數加1
}
}
///如果結束迴圈後flag仍等於1,說明車輛順利到達目的地,否則無法到達目的地
if(flag) cout << count << endl;
else cout << "No Solution!" << endl;
return 0;
}
相關文章
- 加油站問題(貪心演算法)演算法
- 計算題 (sdut oj)
- 貪心演算法——換酒問題演算法
- 貪心演算法篇——區間問題演算法
- 活動選擇問題理解貪心演算法演算法
- 分段函式 (sdut oj)函式
- 貪心演算法解硬幣找零問題演算法
- 使用貪心演算法解決集合覆蓋問題演算法
- 演算法——貪心演算法解0-1揹包問題演算法
- 貪心演算法演算法
- [經典演算法]海盜分金問題sql求解(貪心演算法)演算法SQL
- 計算組合數 (sdut oj)
- 貪心演算法(貪婪演算法,greedy algorithm)演算法Go
- C/C++經典程式訓練5---圖形列印問題 (sdut oj)C++
- 探索貪心演算法:解決最佳化問題的高效策略演算法
- 反悔貪心雜題
- 學一下貪心演算法-學一下貪心演算法演算法
- 貪心演算法Dijkstra演算法
- 9-貪心演算法演算法
- C語言實驗——素數 (sdut oj)C語言
- A+B for Input-Output Practice (IV) (sdut oj)
- C語言實驗——最值 (sdut oj)C語言
- 貪心 做題筆記筆記
- 「貪心」做題記錄
- 常用演算法之貪心演算法演算法
- 演算法基礎–貪心策略演算法
- Moving Tables(貪心演算法)演算法
- Python演算法:貪心策略Python演算法
- 揹包問題演算法全解析:動態規劃和貪心演算法詳解演算法動態規劃
- LeetCode解題記錄(貪心演算法)(二)LeetCode演算法
- LeetCode解題記錄(貪心演算法)(一)LeetCode演算法
- C語言實驗——整數位 (sdut oj)C語言
- C語言實驗——分割整數 (sdut oj)C語言
- 貪心
- 馬踏棋盤演算法(騎士周遊問題)----遞迴與貪心優化演算法演算法遞迴優化
- SDUT---OJ《資料結構與演算法》實踐能力專題訓練2 連結串列資料結構演算法
- 貪心(入門簡單題)
- 小鑫の日常系列故事(五)——卡片遊戲 (sdut oj)遊戲