1070 Mooncake
Posted CSU迦叶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了1070 Mooncake相关的知识,希望对你有一定的参考价值。
1. 一道典型的贪心题,策略是尽可能地多出售单价高的月饼。
2. 开始有一个用例没有通过,看了参考书,说是质量虽然给的都是整数,但是为了计算不出错,需要声明为浮点型。改了以后果然就通过了,但是个中原理不清楚。
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<bits/stdc++.h>
using namespace std;
const int maxn = 10010;
const double eps = 1e-3;
struct mooncake{
double inventory;
double t_price;
double s_price;
}mc[maxn];
bool cmp(mooncake a,mooncake b){
return a.s_price>b.s_price;
}
int main(){
int type,md;//月饼的种类、市场的需求
scanf("%d %d",&type,&md);
for(int i=0;i<type;i++){
scanf("%lf",&mc[i].inventory);
}
for(int i=0;i<type;i++){
scanf("%lf",&mc[i].t_price);
mc[i].s_price = mc[i].t_price/mc[i].inventory;//算出每种月饼的单价
}
//按照单价从高到低排序
sort(mc,mc+type,cmp);
//开始贪心:总是先用单价最高的月饼顶上
double profit = 0;//已经获得的利润
double restMd = md;//还未满足的需求
for(int i=0;i<type;i++){
if(mc[i].inventory>=restMd){//当前库存已经满足剩余需求
profit += restMd*mc[i].s_price;
break;
}else{
profit += mc[i].t_price;
restMd -= mc[i].inventory;
}
}
printf("%.2f",profit);
return 0;
}
以上是关于1070 Mooncake的主要内容,如果未能解决你的问题,请参考以下文章