题目不放了,标准的贪心。按性价比排序就行了,注意一个点可能你需求大于所有月饼的数量。
#include<stdio.h>
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
struct moon {
double s;//数量
double x;//性价比
double j;//总价格
};
bool cmp(moon a,moon b) {
return a.x>b.x;
}
int main() {
int n,f;
double shouyi=0;
moon mo;
vector<moon>a;
double zong=0,zongjia=0;
double shu[1005],jia[1005],xjb[1005];
cin>>n>>f;
for(int i=0; i<n; i++) {
cin>>shu[i];
zong+=shu[i];
}
for(int i=0; i<n; i++) {
cin>>jia[i];
zongjia+=jia[i];
xjb[i]=jia[i]/shu[i];
mo.j=jia[i];
mo.s=shu[i];
mo.x=xjb[i];
a.push_back(mo);
}
if(zong<=f) {
printf("%.2lf\n",zongjia);
return 0;
}
sort(a.begin(),a.end(),cmp);
int k=0;
while(1) {
if(f==0)break;
if(f>a[k].s) {
shouyi+=a[k].j;
f-=a[k].s;
k++;
} else if(f<a[k].s) {
shouyi+=f*a[k].x;
f=0;
} else if(f==a[k].s) {
shouyi+=a[k].j;
f=0;
}
}
printf("%.2lf\n",shouyi);
}