1020 月饼 (25 分)
题目链接
算法分析
贪心算法+结构体排序
优先卖出单个月饼获利最大的那种月饼,总获利肯定最大
代码实现
#include<bits/stdc++.h>
using namespace std;
#define N 1005
struct mooncake{
double left;
double value;
double average_value;
};
struct mooncake mk[N];
bool cmp(mooncake a, mooncake b){
return a.average_value > b.average_value;
}
int main(){
int n;
double tp;
scanf("%d%lf", &n, &tp);
for(int i = 1; i <= n; ++ i)
scanf("%lf", &mk[i].left);
for(int i = 1; i <= n; ++ i){
scanf("%lf", &mk[i].value);
mk[i].average_value = 1.0 * mk[i].value / mk[i].left;
}
double cnt = 0;
sort(mk + 1, mk + n + 1, cmp);
for(int i = 1; i <= n; ++ i){
if(mk[i].left < tp){
cnt += mk[i].value;
tp -= mk[i].left;
}
else{
cnt += tp / mk[i].left * mk[i].value;
break;
}
}
printf("%.2f", cnt);
return 0;
}