PTA月餅の問題
月餅は中国人が中秋節で食べる伝統的な食べ物で、地域によって味の違う月餅がたくさんあります。すべての種類の月餅の在庫、総販売価格、および市場での最大需要を考慮して、得られる最大の利益を計算してください。
注:販売中に在庫の一部を取り出すことができます。例の状況は次のとおりです。月餅が3種類ある場合、在庫はそれぞれ18、15、10万トン、総販売価格はそれぞれ75、72、45億元です。市場の最大需要が20万トンしかない場合、最大の利益戦略は、2番目の月餅15万トンと3番目の月餅50,000トンをすべて販売し、72 + 45/2 = 9.45(10億元)を取得することです。 )。
入力形式:
各入力にはテストケースが含まれています。各テストケースは、最初に月餅の種類の数を示す1000を超えない正の整数Nと、市場での最大需要を示す500を超えない正の整数D(10,000トン)を示します。次の行は、各タイプの月餅の在庫を示すN個の正の数(10,000トン)を示し、最後の行は、各タイプの月餅の合計販売価格(1億元)を示すN個の正の数を示します。数字はスペースで区切られます。
出力形式:
テストケースの各セットについて、1億元を単位とし、小数点以下2桁まで正確に、最大利益を1行で出力します。
入力サンプル:
3 20
18 15 10
75 72 45
`出力例:
94.50
解決されたコード
#include<iostream>
#include<algorithm>
using namespace std;
struct yb{
double zjg;//总售价
double sl;//库存数量
double dj=0.0;//单价
}a[1000]; //用于存各种月饼
bool cmp(yb a,yb b)//用于将月饼单价逆序排列
{
return a.dj>b.dj;
}
int main()
{
int m,n;
cin>>m>>n;
int i;
double money=0.0;
for(i=0;i<m;i++)
{
cin>>a[i].sl;
}
for(i=0;i<m;i++)
{
cin>>a[i].zjg;
}
for(i=0;i<m;i++)
{
a[i].dj=a[i].zjg/a[i].sl;
}
sort(a,a+m,cmp);//将月饼单价逆序排列
for(i=0;i<m;i++)
{
if(n<a[i].sl) break;//如果剩余需求量小于某一种月饼的库存量循环停止
money+=a[i].zjg;
n-=a[i].sl;
}
money+=n*a[i].dj;//求剩余需求量小于某一种月饼的库存量时的钱数 ,,此处i为循环停止后的那一种月饼
printf("%.2lf",money);
return 0;
}
大勢の人がアドバイスを歓迎します。わからない場合は、コメントするか、Q2651877067を追加してください。表示された場合は、できるだけ早く返信します。!!!