贪心算法实例

题目描述:

小 B 同学想去吃自助餐,但是他是那种比较节俭的的人,既不想浪费食物,又想尽可能吃的贵一点,他于是私下里做了调查。 小蓝餐厅的自助餐有 n 种食材,每种食材都有它的价格。 而且也能估计出每一份的重量,所以他列了一个表格。 红烧牛肉 30元 300g 油闷大虾 8元 5g 四喜丸子 4元 8g 三文鱼 5元 3g 排骨 18元 200g 麻辣兔头 20元 120g 高汤海参 40元 70g 扇贝粉丝 8元 32g 牛排 79元 240g ... 现在小 B 想知道在他到底最多吃多少钱的菜品。 假设自助餐厅的菜品供应同样的菜品每个人只能取一份。 小B的饭量假设为 C,单位为 g。 现在请你设计一个程序帮助小 B 计算他的最多吃了多少钱。

输入:

第一行输入 n c(0<=n<=1000) 其中 n 为菜品数量,c为小 B 的肚子容量。 第二行输入两个数 V W 第一个数 V[i] 是第 i 个菜品的价值(0<=v[i]<=10000) 第二个数 w[i] 是第 i 个菜品的质量(0<=w[i]<=10000)

输出:

代码如下:

#include<bits/stdc++.h>
using namespace std;
struct food{
	double w;
	double v;
	double aver;
};
bool cmp(food a,food b){
	return a.aver>b.aver;
}
int main(){
	food foods[10000];
	int n;
	double c,value;
	cin>>n>>c;
	for(int i=0;i<n;i++){
		cin>>foods[i].v>>foods[i].w;
		foods[i].aver =foods[i].v /foods[i].w ;		
	}
sort(foods,foods+n,cmp);
for(int i=0;i<n;i++){
	if(foods[i].w<=c){
		value+=foods[i].v;
		c-=foods[i].w;
	}
	else{
		value+=c*foods[i].aver ;
		c=0;
	}
	if(c==0) break;
	}
	printf("%.3f",value);
}

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值