题解
2026-05-19 17:17:44
发布于:浙江
10阅读
0回复
0点赞
#include <bits/stdc++.h>
using namespace std;
struct {
double a,b,c;//a是总重,b是总价,c是单价
}a[111];
bool cmp(q x,q y){
return x.c>y.c;//从大到小排序
}
int main(){
double s;int n;cin>>n>>s;//n是堆数,s是背包总容量
for(int i=1;i<=n;i++){
cin>>a[i].a>>a[i].b;
a[i].c=a[i].b/a[i].a;//计算单价
}
sort(a+1,a+n+1,cmp);
double sum=0;//总收获
for(int i=1;i<=n;i++){
if(s-a[i].a>0){//如果能装下
s-=a[i].a;//剩余背包容量减少
sum+=a[i].b;//总收获增加
}else{//装不下
sum+=s*a[i].c;//剩余容量乘单价
break;
}
}
printf("%.2f",sum);//保留两位小数
return 0;
}
这里空空如也







有帮助,赞一个