日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

九度OJ 1437 To Fill or Not to Fill -- 贪心算法

發(fā)布時(shí)間:2023/12/2 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 九度OJ 1437 To Fill or Not to Fill -- 贪心算法 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目地址:http://ac.jobdu.com/problem.php?pid=1437

?

題目描述:

With highways available, driving a car from Hangzhou to any other city is easy. But since the tank capacity of a car is limited, we have to find gas stations on the way from time to time. Different gas station may give different price. You are asked to carefully design the cheapest route to go.

輸入:

For each case, the first line contains 4 positive numbers: Cmax (<= 100), the maximum capacity of the tank; D (<=30000), the distance between Hangzhou and the destination city; Davg (<=20), the average distance per unit gas that the car can run; and N (<= 500), the total number of gas stations. Then N lines follow, each contains a pair of non-negative numbers: Pi, the unit gas price, and Di (<=D), the distance between this station and Hangzhou, for i=1,...N. All the numbers in a line are separated by a space.

輸出:

For each test case, print the cheapest price in a line, accurate up to 2 decimal places. It is assumed that the tank is empty at the beginning. If it is impossible to reach the destination, print "The maximum travel distance = X" where X is the maximum possible distance the car can run, accurate up to 2 decimal places.

樣例輸入:
50 1300 12 8 6.00 1250 7.00 600 7.00 150 7.10 0 7.20 200 7.50 400 7.30 1000 6.85 300 50 1300 12 2 7.10 0 7.00 600
樣例輸出:
749.17 The maximum travel distance = 1200.00
/** Main.c** Created on: 2014年1月18日* Author: Shaobo* greedy algorithm*/ #include <stdio.h> #include <stdlib.h> #include <math.h>#define MAXN 501 #define MAXC 30000000.0typedef struct station{float price;int dist; }Station;int compare(const void * p, const void * q){Station * p1 = (Station *)p;Station * q1 = (Station *)q;return p1->dist - q1->dist; }int main(void){int Cmax, D, Davg, N; //容量、距離、每單位氣行駛的距離、加氣站總數(shù)int i;Station sta[MAXN];float sum, remind_gas, tmp;int k, step;while (scanf("%d %d %d %d", &Cmax, &D, &Davg, &N) != EOF){for (i=0; i<N; ++i){scanf("%f %d", &sta[i].price, &sta[i].dist);}sta[N].dist = D;sta[N].price = 1000000.0;qsort(sta, N, sizeof(Station), compare); //按與杭州距離大小給加氣站排序if (sta[0].dist > 0){printf ("The maximum travel distance = 0.00\n");continue;}sum = 0; //總費(fèi)用step = Cmax*Davg; //加滿油行駛最大距離remind_gas = 0; //剩余油量for (i=0; i<N; ++i){k = i+1;if (i != 0)remind_gas -= ((float)(sta[i].dist -sta[i-1].dist))/Davg;for (; k<N && sta[k].price>=sta[i].price; ++k)continue;if (sta[k].dist-sta[i].dist > step){sum += (Cmax-remind_gas)*sta[i].price;remind_gas = Cmax;}else{tmp = ((float)(sta[k].dist-sta[i].dist))/Davg - remind_gas;if (fabs(tmp)>1e-5 && tmp>0){sum += tmp*sta[i].price;remind_gas = ((float)(sta[k].dist-sta[i].dist))/Davg;}}if (sta[i+1].dist - sta[i].dist > step){printf ("The maximum travel distance = %.2f\n", (float)(sta[i].dist+step));break;}}if (i == N){printf ("%.2f\n", sum);}}return 0; }

?


?

轉(zhuǎn)載于:https://www.cnblogs.com/liushaobo/p/4373857.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的九度OJ 1437 To Fill or Not to Fill -- 贪心算法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。