時限: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...