1070 Mooncake (25 分)
题意
给出多个商品的数量与总价,求m个商品的最高价值。
思路
求出不同商品的单价,对单价从大到小排序,尽量选取单价高的商品。
代码
#include<stdio.h>
#include<algorithm>
using namespace std;
typedef struct node{
double average,sum;
}node;
bool cmp(node x,node y)
{
return x.average>y.average;
}
int main()
{
node moonCake[10007];
int n,d;
double amounts[10007],x,total=0;
scanf("%d%d",&n,&d);
for(int i=0;i<n;i++){
scanf("%lf",&amounts[i]);
}
for(int i=0;i<n;i++){
scanf("%lf",&x);
moonCake[i].average=(x*100/amounts[i]);
moonCake[i].sum=amounts[i];
}
sort(moonCake,moonCake+n,cmp);
// for(int i=0;i<n;i++){
// printf("ave=%f %f\n",moonCake[i].average,moonCake[i].sum);
// }
for(int i=0;i<n;i++){
// printf("total=%f\n",total);
if(d>moonCake[i].sum){
total+=moonCake[i].average*moonCake[i].sum/100;
d-=moonCake[i].sum;
}else{
total+=d*moonCake[i].average/100;
break;
}
}
printf("%.2f\n",total);
return 0;
}