月餅は中国人が中秋節で食べる伝統的な食べ物で、地域によって味の違う月餅がたくさんあります。すべての種類の月餅の在庫、総販売価格、および市場での最大需要を考慮して、取得できる最大利益を計算してください。
注:販売時に在庫の一部を取り出すことができます。例の状況は次のとおりです。月餅が3種類ある場合、在庫はそれぞれ18、15、10万トン、総販売価格はそれぞれ75、72、45億元です。市場の最大需要が20万トンしかない場合、最大の利益戦略は、2番目の月餅15万トンと3番目の月餅50,000トンをすべて販売し、72 + 45/2 = 9.45(10億元)を取得することです。 )。
入力フォーマット:
各入力にはテストケースが含まれています。各テストケースは、最初に月餅の種類の数を表す1000 N以下の正の整数と、市場での最大需要を表す500(10,000トン)以下の正の整数を示します。次の行は、各タイプの月餅の在庫を示すN個の正の数(10,000トン)を示し、最後の行は、各タイプの月餅の合計販売価格(1億元)を示すN個の正の数を示します。数字はスペースで区切られます。
出力フォーマット:
テストケースの各セットについて、最大利益を1行で、1億元で、小数点以下2桁まで正確に出力します。
入力サンプル:
3 20
18 15 10
75 72 45
サンプル出力:
94.50
doubleを使用する必要があります。そうしないと、1つの例が合格しません
ACコード:
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<set>
#include<queue>
#include<stack>
using namespace std;
const int maxv = 100100;
struct mooncake
{
double price,num;
double p_n;
}m[1100];
bool cmp(mooncake a,mooncake b)
{
return a.p_n>b.p_n;
}
int main()
{
int N,D;
cin>>N>>D;
for(int i=0;i<N;i++)
{
cin>>m[i].num;
}
for(int i=0;i<N;i++)
{
cin>>m[i].price;
m[i].p_n=m[i].price/m[i].num;
}
sort(m,m+N,cmp);
double ans=0;
for(int i=0;i<N;i++)
{
if(m[i].num<D)
{
ans+=m[i].price;
D-=m[i].num;
}
else
{
ans+=m[i].p_n*D;
break;
}
}
printf("%.2f",ans);
return 0;
}