中国の人々は月餅は中秋節では、伝統的な食べ物で食べて、異なる領域が月餅の多くの異なった味を持っています。今月餅の在庫、合計金額、および市場の最大需要のすべての種類を考えると、あなたはどのくらいの計算された最大の利益を得ることができます。
注:株式売却の一部を除去することを許可。与えられた事例はこれです:私たちは月餅の3種類を持っている場合は、その株式は、それぞれ75,72,45億、合計金額18,15,10トンでした。最大市場の需要はわずか20億トンであれば、我々は月餅の2種類の15万トンだけでなく、月餅の3種類5万トンの全てを売却する最大の収益戦略である必要があり、72 + 2分の45 = 94.5(百万)を取得。
入力フォーマット:
各入力は、テストを含みます。各テストケースは、Dは、市場の最大需要を表す整数ではない1000以上のNは、正の(トン数千単位)月餅の種類数、及びせいぜい500を表す正の整数が好ましいです。次いで、所与のN番目の行は、(トン数千の単位で)各月餅の株式の正の数を表し、N最後の行は、正の数(十億の単位で)各月餅の総販売価格を示し得られます。数字の間のスペースで区切られています。
出力フォーマット:
各試験、出力ラインで、数十億の単位でかつ正確に2つの小数点以下の最大の利益のために。
サンプル入力:
3 20
18 15 10
75 72 45
出力例:
94.50
#include <cstdio>
#include <malloc.h>
#include <algorithm>
using namespace std;
typedef struct {
float stock;
float price;
float unit;
}moon,*pmoon;
bool cmp(moon a,moon b)
{
return a.unit>b.unit;
}
int main()
{
int kind,demand;
scanf("%d %d",&kind,&demand);
pmoon cake=(pmoon)malloc((kind)*sizeof(moon));
int i;
for(i=0; i<kind; i++)
scanf("%f",&cake[i].stock);
for(i=0; i<kind; i++)
{
scanf("%f",&cake[i].price);
cake[i].unit=cake[i].price/cake[i].stock;
}
sort(cake,cake+kind,cmp);
float sum=0;
for(i=0; i<kind; i++)
{
if(demand>=cake[i].stock)
{
sum+=cake[i].price;
demand-=cake[i].stock;
}else{
sum+=demand*cake[i].unit;
break;
}
}
printf("%.2f",sum);
return 0;
}