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的主要内容,如果未能解决你的问题,请参考以下文章

1070 Mooncake

1070. Mooncake (25)

1070 Mooncake 贪心

1070 Mooncake

PAT甲题题解-1070. Mooncake (25)-排序,大水题

1070 Mooncake (25 分)难度: 简单 / 知识点: 贪心