题目描述:
小 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);
}