貪心法
問題背景
一輛汽車加滿油後可行駛nkm。旅途中有若干加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。貪心演算法演算法設計:
對於給定的n和k個加油站位置,計算最少加油次數。
資料輸入:
n:表示汽車加滿油後可行駛nkm
k:旅途中有k個加油站
k+1個整數:表示第k個加油站與第k-1個加油站之間的距離。
第0個加油站表示出發地,汽車已加滿油。
第k+1個加油站表示目的地。
資料輸出:
最少加油次數和具體在哪幾個加油站加油。
基本步驟
從問題的某乙個初始解出發逐步逼近給定的目標,以盡可能快的地求得更好的解。當達到演算法中的某一步不能再繼續前進時,演算法停止。
貪心演算法下的虛擬汽車加油問題
思想根據貪心選擇性,擷取當前位置到下一加油站區間,判斷當前油量是否能夠到達下一加油站,如果不能,在當前加油站加油;如果能,行駛至下一加油站。在擷取的區間內做出判斷,即選取區域性做出最優判斷。
過程設定變數tmp_gas表示當前汽車油量可行駛公里數
判斷到下乙個加油站的距離是否大於tmp_gas
如果大於則繼續前行,且當前油量可行駛公里數tmp_gas減去到下乙個加油站的距離
否則在當前加油站加滿油
貪心演算法虛擬汽車加油-python**
本**為python3下的貪心法虛擬汽車加油問題
關鍵步驟已標記注釋
# coding : utf-8
# 計算汽車最少加油次數以及加油站點
defcar_addgas
(n,k,dist)
: tmp_gas = n
station =[0
]*kfor i in
range
(len
(dist)):
if dist[i]
< tmp_gas:
tmp_gas-=dist[i]
else
: station[i-1]
=1tmp_gas=n-dist[i]
return station
# 讀input.txt獲取資料
with
open
('input.txt'
,'r'
)as f:
nk=f.readline(
).split(
) n =
int(nk[0]
,10) k =
int(nk[1]
,10) dist =
list
(map
(int
,f.readline(
).split())
)print
("\n汽車加滿油可行駛公里數:%d\n"
%n)print
("旅途中的加油站個數:%d\n"
%k)print
("各加油站間的公里數:\n"
)print
(dist)
print
("\n---------------------- solution ----------------------"
)station = car_addgas(n,k,dist)
# 轉換成加油站號s=[
]for i in
range(1
,k+1):
if i*station[i-1]
!=0:1
])# print(s)
res=
len(s)
# print(res)
print
("\n汽車最少加油次數為%d"
%res)
print
("\n汽車加油分別所在的加油站為:\n"
)print
(s)
分界線
***
****
****
****
****
****
***date:2020/1
/18category:演算法設計
author:ver.*
****
****
****
****
****
****
*
虛擬汽車加油問題 演算法設計
一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應 在哪些加油站停靠加油,使沿途加油次數最少。對於給定的n n 5000 和k k 1000 個加油站位置,程式設計計算最少加油次數。並證明演算法能產生乙個最優解。要求 輸入 第一行有2個正整數n和k,表示汽車加滿油後可行駛...
汽車加油問題 貪心演算法
問題描述 一輛汽車加滿油後可行駛 nkm 旅途中有若干個加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。程式設計任務 對於給定的n和k 個加油站位置,程式設計計算最少加油次數。資料輸入 第1行有 2個正整數n和 k,表示汽車加滿油後可行駛 nkm,且旅途有 k個加油站。接...
汽車加油問題(貪心演算法)
汽車加油問題 time limit 1000 ms memory limit 65536 kib problem description 一輛汽車加滿油後可行駛n公里。旅途中有若干個加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。並證明演算法能產生乙個最優解。對於給定的n...