1.タイトルの説明
入力仕様:
出力仕様:
入力例:
200 3
180 150 100
7.5 7.2 4.5
出力例:
9.45
2、問題解決のアイデア
貪欲に考えて、最大の利益を得るために、私たちは常に最も高い単価で月餅を販売し、次に販売後に2番目に高い月餅を購入します。構造体を使用して、月額ケーキを表すことができます。これには、単価、合計価格、および数量が含まれます。単価は、合計価格を数量で割ることで取得できます。構造体配列は、単価の大きいものから小さいものへと並べ替えられ、順にトラバースされます。数量はタイトルに到達します。数値を指定する場合は、ループを終了して答えを出力します。
3、ACコード
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1010;
struct Mooncake
{
double single, price;
double num;
}mooncake[maxn];
bool cmp(Mooncake a, Mooncake b)
{
return a.single > b.single;}
int main()
{
int N, D, cnt = 0;
double profit = 0;
scanf("%d%d", &N, &D);
for(int i=0; i<N; i++)
scanf("%lf", &mooncake[i].num);
for(int i=0; i<N; i++)
{
scanf("%lf", &mooncake[i].price);
mooncake[i].single = mooncake[i].price/mooncake[i].num;
}
sort(mooncake, mooncake+N, cmp);
int now = 0;
while(cnt < D && now < N)
{
if(mooncake[now].num + cnt <= D)
{
cnt += mooncake[now].num;
profit += mooncake[now].price;
}
else
{
profit += mooncake[now].single * (D-cnt);
cnt = D;
}
now++;
}
printf("%0.2f", profit);
return 0;
}