PTA月餅の問題

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を追加してください。表示された場合は、できるだけ早く返信します。

おすすめ

転載: blog.csdn.net/mmmjtt/article/details/113921789