題目來源html
月餅是中國人在中秋佳節時吃的一種傳統食品,不一樣地區有許多不一樣風味的月餅。現給定全部種類月餅的庫存量、總售價、以及市場的最大需求量,請你計算能夠得到的最大收益是多少。ios
注意:銷售時容許取出一部分庫存。樣例給出的情形是這樣的:假如咱們有 3 種月餅,其庫存量分別爲 1八、1五、10 萬噸,總售價分別爲 7五、7二、45 億元。若是市場的最大需求量只有 20 萬噸,那麼咱們最大收益策略應該是賣出所有 15 萬噸第 2 種月餅、以及 5 萬噸第 3 種月餅,得到 72 + 45/2 = 94.5(億元)。測試
每一個輸入包含一個測試用例。每一個測試用例先給出一個不超過 1000 的正整數 N 表示月餅的種類數、以及不超過 500(以萬噸爲單位)的正整數 D 表示市場最大需求量。隨後一行給出 N 個正數表示每種月餅的庫存量(以萬噸爲單位);最後一行給出 N 個正數表示每種月餅的總售價(以億元爲單位)。數字間以空格分隔。spa
對每組測試用例,在一行中輸出最大收益,以億元爲單位並精確到小數點後 2 位。code
3 20 18 15 10 75 72 45
這道題要求的是最大收益,給出月餅的種類和市場需求量,再給出它們的庫存和總售價。htm
首先求出不一樣月餅的單價,先計算單價最高的月餅(假定A的單價最大)blog
用一個結構體保存月餅的信息:月餅庫存,總售價,單價排序
按照單價高低對月餅信息進行排序,獲得單價最高的月餅ci
狀況1:A類月餅總庫存 > 市場最大需求量N,則最大收益 = A的單價 * 市場最大需求量get
狀況2:A類月餅庫存 < 市場最大需求量, 則A的收益 = A的單價 * 市場最大需求量
新的市場最大需求 = 市場最大需求量 減去 A的庫存
而後再從單價第二大的計算收益,
最大收益 = 全部月餅收益
注意:庫存用double類型,用int的話測試點2過不去
1 #include <iostream> 2 #include <algorithm> 3 #include <string> 4 #include <cctype> 5 #include <vector> 6 #include <stack> 7 #include <climits> 8 #include <cstdio> 9 #include <numeric> 10 using namespace std; 11 12 typedef struct MoonCake { 13 double store; //月餅庫存 14 double sell; //總售價 15 double unitPrice; //單價 16 }MoonCake; 17 18 bool myCmp(MoonCake a, MoonCake b) 19 { 20 return a.unitPrice > b.unitPrice; 21 } 22 23 int main() 24 { 25 int N; //月餅種類數 26 double D; //市場最大需求量 27 double result = 0; 28 cin >> N >> D; 29 vector<MoonCake> vecMoon(N); 30 for (int i = 0; i < N; ++i) 31 { 32 cin >> vecMoon[i].store; 33 } 34 for (int i = 0; i < N; ++i) 35 { 36 cin >> vecMoon[i].sell; 37 vecMoon[i].unitPrice = vecMoon[i].sell / vecMoon[i].store; 38 } 39 //按照單價高低排序 40 sort(vecMoon.begin(), vecMoon.end(), myCmp); 41 for (int i = 0; i < N; ++i) 42 { 43 if (vecMoon[i].store <= D) 44 { 45 //該種類月餅的庫存小於市場最大需求 46 result = result + vecMoon[i].sell; 47 } 48 else 49 { 50 //庫存大於市場需求 51 result = result + vecMoon[i].unitPrice * D; 52 break; 53 } 54 D = D - vecMoon[i].store; 55 } 56 printf("%0.2lf", result); 57 return 0; 58 }