1020?月餅?(25 分)
月餅是中國人在中秋佳節(jié)時吃的一種傳統(tǒng)食品可婶,不同地區(qū)有許多不同風(fēng)味的月餅≌盒海現(xiàn)給定所有種類月餅的庫存量、總售價辽故、以及市場的最大需求量银还,請你計算可以獲得的最大收益是多少风宁。
注意:銷售時允許取出一部分庫存洁墙。樣例給出的情形是這樣的:假如我們有 3 種月餅蛹疯,其庫存量分別為 18、15热监、10 萬噸捺弦,總售價分別為 75、72孝扛、45 億元列吼。如果市場的最大需求量只有 20 萬噸,那么我們最大收益策略應(yīng)該是賣出全部 15 萬噸第 2 種月餅苦始、以及 5 萬噸第 3 種月餅寞钥,獲得 72 + 45/2 = 94.5(億元)。
輸入格式:
每個輸入包含一個測試用例陌选。每個測試用例先給出一個不超過 1000 的正整數(shù)?N?表示月餅的種類數(shù)理郑、以及不超過 500(以萬噸為單位)的正整數(shù)?D?表示市場最大需求量蹄溉。隨后一行給出?N?個正數(shù)表示每種月餅的庫存量(以萬噸為單位);最后一行給出?N?個正數(shù)表示每種月餅的總售價(以億元為單位)您炉。數(shù)字間以空格分隔柒爵。
輸出格式:
對每組測試用例,在一行中輸出最大收益赚爵,以億元為單位并精確到小數(shù)點后 2 位棉胀。
輸入樣例:
3 20
18 15 10
75 72 45
輸出樣例:
94.50
#include <iostream>
#include<stdio.h>
#include<cstring>
#include <algorithm>
using namespace std;
typedef struct yue{
float kg;
float sale;
float per;
}YUE;//改成float的話測試樣例2就可以
bool compare(YUE A,YUE B){
return (A.per>B.per);
}
int main()
{
int n;
float num;
float sum=0;
scanf("%d",&n);
scanf("%f",&num);
yue a[n];
for(int i=0;i<n;i++){
? ? scanf("%f",&a[i].kg);
}
for(int i=0;i<n;i++){
? ? scanf("%f",&a[i].sale);
? ? a[i].per=a[i].sale/a[i].kg;
}
sort(a,a+n,compare);//一開始寫的a+3 測試案例中有兩個正確其他全錯誤
for(int i=0;i<n;i++){
? ? if(num<=(float)a[i].kg){
? ? ? ? sum=sum+num*a[i].per;
? ? ? ? break;//一開始漏了
? ? }
? ? else{
? ? ? ? sum=sum+a[i].sale;
? ? ? ? num=num-a[i].kg;
? ? }
}
? ? printf("%.2f",sum);
}