NOJ1149 演算法實驗四 旅遊預算

2021-10-10 21:48:36 字數 2465 閱讀 3028

時限:1000ms 記憶體限制:10000k 總時限:3000ms

描述乙個旅行社需要估算乘汽車從某城市到另一城市的最小費用,沿路有若干加油站,每個加油站收費不一定相同。旅遊預算有如下規則: 若油箱的油過半,不停車加油,除非油箱中的油不可支援到下一站;每次加油時都加滿;在乙個加油站加油時,司機要花費2元買東西吃;司機不必為其他意外情況而準備額外的油;汽車開出時在起點加滿油箱;計算精確到分(1元=100分)。編寫程式估計實際行駛在某路線所需的最小費用。

輸入第一行為起點到終點的距離(實數) 第二行為三個實數,後跟乙個整數,每兩個資料間用乙個空格隔開。其中第乙個數為汽車油箱的容量(公升),第二個數是每公升汽油行駛的公里數,第三個數是在起點加滿油箱的費用(精確到分),第四個數是加油站的數量。(〈=50)。接下去的每行包括兩個實數,每個資料之間用乙個空格分隔,其中第乙個數是該加油站離起點的距離,第二個數是該加油站每公升汽油的**(元/公升)。加油站按它們與起點的距離公升序排列。所有的輸入都有一定有解。

輸出共兩行,每行都有換行 第一行為乙個實數和乙個整數,實數為旅行的最小費用,以元為單位,精確到分,整數表示途中加油的站的n。第二行是n個整數,表示n個加油的站的編號,按公升序排列。資料間用乙個空格分隔,最後乙個資料後也輸出空格,此外沒有多餘的空格。

輸入樣例

516.3 15.7 22.1 20.87 3 125.4 1.259 297.9 1.129 345.2 0.999

輸出樣例

38.09 1 2

#include

#include

#include

using

namespace std;

/********輸入資料部分*******/

double length;

double capa,mile,cost;

int n;

double dis[51]

;double price[50]

;/****************************/

/****演算法中用到的其他變數***/

bool isadd[50]

;//在第i個加油站是否加油

double min_cost[50]

;//備忘錄

int cnt;

double maxdis;

//加滿油後能走的最大距離

/****************************/

/**********函式宣告*********/

doubledp(

int i)

;//返回「從第i個加油站滿油出發,到達終點的最小費用」

void

input()

;//輸入資料

void

init()

;//變數初始化

void

output

(double mincost)

;//輸出資料

/****************************/

intmain()

void

input()

//輸入資料

dis[0]

=0;//假設起點為第0個加油站(實際上沒有)

dis[n+1]

=length;

//假設終點為第n+1個加油站(實際上沒有)

}void

init()

//變數初始化

min_cost[0]

=dbl_max;

//從起點到終點的費用設為最大值

cnt=0;

//需要加油的加油站個數

maxdis=capa*mile;

//加滿油後能到達的最大距離

}doubledp(

int i)

//滿油狀態從加油站i到終點的最小花費

else

if(min_cost[i]

!=dbl_max)

//備忘錄中有記錄

else

//若備忘錄中無記錄,則需要計算填寫

if(j==n+1)

//如果能直接到達終點

else

//否賊就要在加油站j加滿油

cost_j_n=cost_j+

dp(j)

;//從i到達終點的費用=從i到達j的費用+從j到達終點的費用

if(min_cost[i]

>cost_j_n)

//遍歷j時,取最小的「從i到達終點的費用」}if

(min_j!=-1

)//如果min_j不等於初始值,證明途中加過油

return min_cost[i]

;//返回從i到終點的最小費用}}

void

output

(double mincost)

} cout

for(

int i=

1; i<=n; i++)}

cout<}

NOJ1148 演算法實驗四 石子合併

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述在乙個圓形操場的四周擺放著n堆石子 n 100 現要將石子有次序地合併成一堆。規定每次只能選取相鄰的兩堆合併成新的一堆,並將新的一堆的石子數,記為該次合併的得分。編一程式,讀入石子堆數n及每堆的石子數 20 選擇一種合併石子的方...

NOJ1084 演算法實驗四 花生公尺(三)

時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述五一長假第三天,tom和jerry在倉庫散步的時候又發現了一堆花生公尺 倉庫,又見倉庫 這次tom制定分花生公尺規則如下 1 tom和jerry輪流從堆中取出k粒花生公尺吃掉 2 第一次取花生公尺的人只能取一粒,以後取花生公尺的...

2020 noj演算法實驗考試

思路 0 1 揹包問題 思路 素數環問題 思路 二分查詢 0 1揹包問題 素數環問題 加1乘2平方 最長公共子串行 活動安排 描述給定乙個單調遞增的整數序列,問某個整數是否在序列中。輸入第一行為乙個整數n,表示序列中整數的個數 第二行為n n不超過10000 個整數 第三行為乙個整數m m不超過50...