第一次只过了两个点
修改后考虑以下情况:
1. 所有加在一起都不够
2. 两个商品数量相同价格不同
修改后还有一个点没过,自己嫁了0但是他没有考察这个点
大佬们说是库存也要用float或double,精度问题
修改后成功,,
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <map>
using namespace std;
int n,d,weight;
float arr[11000];
float crr[11000],brr[11000], sum;
struct stu{
float c;
float ma;
};
stu p[11000];
bool cmp(stu a, stu b){
return a.c > b.c;
}
int main(){
scanf("%d%d",&n,&d);
bool key = true;
for(int i=0; i<n; i++){
scanf("%f",&arr[i]);
if(arr[i] != 0) key = false;
}
for(int i=0; i<n; i++){
float m;
scanf("%f",&m);
crr[i] = m/arr[i];
p[i].c = crr[i];
p[i].ma = arr[i];
}
if(key) {
printf("0");
return 0;
}
sort(p,p+n,cmp);
int t = 0;
int yu = d;
while(yu != 0){
if(p[t].ma < yu || p[t].ma == yu){
sum += p[t].ma * p[t].c;
yu -= p[t].ma;
t++;
if(t == n) break;
}
else if(p[t].ma > yu){
sum += yu * p[t].c;
yu = 0;
}
}
printf("%.02f",sum);
return 0;
}
撞