一、概述
很简单的一道贪心题目,如何卖月饼使收益最大。
降序排列月饼单价并选择即可。注意,存在所有的月饼都不够卖的情况,对于这种情况,要特殊说明,否则会出现段错误。
二、分析
结构体存储,sort排序单价,都很简单。
只有一点注意:
i=0;
while(D-Cake[i].amount>0)
{
D=D-Cake[i].amount;
sum+=Cake[i].price;
i++;
if(i==N)
break;
}
if(i<N)
sum+=Cake[i].price*(D/Cake[i].amount);
这里不规定i的范围,会导致段错误。
三、总结
虽说是贪心,感觉和模拟也差不多。
PS:代码如下
#include<stdio.h>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
struct mooncake
{
double amount;
double price;
double per;
}Cake[1010];
bool cmp(mooncake a,mooncake b)
{
return a.per>b.per;
}
int main()
{
int N,D;
scanf("%d %d",&N,&D);
int i;
for(i=0;i<N;i++)
scanf("%lf",&Cake[i].amount);
for(i=0;i<N;i++)
scanf("%lf",&Cake[i].price);
for(i=0;i<N;i++)
Cake[i].per=Cake[i].price/Cake[i].amount;
sort(Cake,Cake+N,cmp);
double sum=0;
i=0;
while(D-Cake[i].amount>0)
{
D=D-Cake[i].amount;
sum+=Cake[i].price;
i++;
if(i==N)
break;
}
if(i<N)
sum+=Cake[i].price*(D/Cake[i].amount);
printf("%.2lf",sum);
}