题目描述
阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 N(N≤100)堆金币,第 i 堆金币的总重量和总价值分别是 mi,vi(1≤mi,vi≤100)。阿里巴巴有一个承重量为 T(T≤1000)的背包,但并没办法将全部的金币都装进去。
他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?
输入格式
第一行两个整数N,T。
接下来N行,每行两个整数mi,vi。
输出格式
一个实数表示答案,输出两位小数。
样例输入
4 50 10 60 20 100 30 120 15 45
样例输出
240.00
问题提示
源代码
#include <bits/stdc++.h>
using namespace std;
int n,t;
double ans=0;
struct node{
double m,v,p;
}a[1010];
int cmp(node x,node y){
return x.p>y.p;
}
int main(){
cin>>n>>t;
for(int i=1;i<=n;i++){
cin>>a[i].m>>a[i].v;
a[i].p=a[i].v/a[i].m;
}
sort(a+1,a+n+1,cmp);
for(int i=1;i<=n;i++){
if(t>=a[i].m){
t-=a[i].m;
ans+=a[i].v;
}else{
ans+=t*a[i].p;
break;
}
}
printf("%.2lf",ans);
return 0;
}