一、题目描述
Input Specification:
Output Specification:
Sample Input:
3 200
180 150 100
7.5 7.2 4.5
Sample Output:
9.45
二、解题思路
贪心思想,要得到最大利益,那我们就一直卖单价最高的月饼,卖完之后再买第二高的月饼,以此类推。我们可以用一个结构体表示月饼,里面包含单价、总价和数量,单价可以由总价除以数量得出,将结构体数组按单价从大到小排序,然后按顺序遍历,数量到达题目所给数字时,退出循环,输出答案即可。
三、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;
}