1020 月餅 (25 分)


月餅是中國人在中秋佳節時吃的一種傳統食品,不同地區有許多不同風味的月餅。現給定所有種類月餅的庫存量、總售價、以及市場的最大需求量,請你計算可以獲得的最大收益是多少。

注意:銷售時允許取出一部分庫存。樣例給出的情形是這樣的:假如我們有 3 種月餅,其庫存量分別為 18、15、10 萬噸,總售價分別為 75、72、45 億元。如果市場的最大需求量只有 20 萬噸,那么我們最大收益策略應該是賣出全部 15 萬噸第 2 種月餅、以及 5 萬噸第 3 種月餅,獲得 72 + 45/2 = 94.5(億元)。

輸入格式:

每個輸入包含一個測試用例。每個測試用例先給出一個不超過 1000 的正整數 N 表示月餅的種類數、以及不超過 500(以萬噸為單位)的正整數 D 表示市場最大需求量。隨后一行給出 N 個正數表示每種月餅的庫存量(以萬噸為單位);最后一行給出 N 個正數表示每種月餅的總售價(以億元為單位)。數字間以空格分隔。

輸出格式:

對每組測試用例,在一行中輸出最大收益,以億元為單位並精確到小數點后 2 位。

分析:看誰單價高就賣誰,剛開始定義了好幾個數組存,結果沒什么思路,后來看的題解,用了結構體,結構體真是太有用了,另外所有的類型都要定義成double

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 using namespace std;
 7 struct mooncake      //用結構體可以方便對單價排序,分開定義數組會打亂順序
 8 {
 9     double knum;       //都有可能是小數
10     double pnum;
11     double anum;
12 };
13 bool cmp(mooncake a,mooncake b)
14 {
15     return a.anum>b.anum;
16 }
17 int main()
18 {
19     int N,D;
20     cin>>N>>D;
21     mooncake mk[1001];
22     for(int i=0;i<N;i++)
23         cin>>mk[i].knum;
24     for(int i=0;i<N;i++)
25         cin>>mk[i].pnum;
26     for(int i=0;i<N;i++)
27         mk[i].anum=mk[i].pnum/mk[i].knum;
28     sort(mk,mk+N,cmp);
29 
30     int i=0;
31     double sum=0;
32     while(D!=0)
33     {
34         if(D<=mk[i].knum)
35         {
36             sum+=mk[i].anum*D;
37             D=0;
38         }
39         else
40         {
41             sum+=mk[i].pnum;
42             D-=mk[i].knum;
43         }
44         i++;
45     }
46     printf("%.2f",sum);     //輸出帶格式,使用printf更方便
47 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM