题目链接:点击打开链接
知识点笔记:
AC代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct INFO{
double stock;
double sum;
double price;
}cake[1010];
bool cmp(INFO a ,INFO b){
return a.price>b.price;
}
int main() {
int n;
double need;
scanf("%d %lf",&n,&need);
for(int i=0;i<n;i++){
scanf("%lf ",&cake[i].stock);
}
for(int i=0;i<n;i++){
scanf("%lf",&cake[i].sum);
cake[i].price=cake[i].sum/cake[i].stock;
}
sort(cake,cake+n,cmp);
double w=0; //利润
double sale=0; //卖出了多少吨
for(int i=0;i<n;i++){
if(cake[i].stock+sale<=need){
w+=cake[i].sum; //需求量大于这类的总吨数,直接加
sale+=cake[i].stock;
}else{
double q = need-sale; // 差额
w += q*cake[i].price;
break;
}
}
printf("%.2f\n",w);
return 0;
}