这道题的思路跟奎奎发红包的思路是一样的
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e2+10;
int n;
double t,sum;
struct node{
double m,v;
}s[maxn];
bool cmp(const node&a,const node&b){
return a.v/a.m>b.v/b.m;
}
int main(){
scanf("%d%lf",&n,&t);
for(int i=1;i<=n;i++){
scanf("%lf%lf",&s[i].m,&s[i].v);
}
sort(s+1,s+1+n,cmp);
for(int i=1;i<=n;i++){
if(t>=s[i].m){
sum+=s[i].v;
t-=s[i].m;
}
else{
sum+=t/s[i].m*s[i].v;
break;
}
}
printf("%.2lf\n",sum);
}