题目:
题目描述
阿里巴巴走进了装满宝藏的藏宝洞。藏宝洞里面有 堆金币,第 堆金币的总重量和总价值分别是 。阿里巴巴有一个承重量为 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。请问阿里巴巴最多可以拿走多少价值的金币?
输入格式
第一行两个整数 。
接下来 行,每行两个整数 。
输出格式
一个实数表示答案,输出两位小数。
输入输出样例 #1
输入 #1
4 50 10 60 20 100 25 100 15 45
|
输出 #1
题解:
#include<iostream> #include<iomanip> #include<algorithm> using namespace std; struct Node{ double m; double v; double b; } a[10000]; bool cmp(Node x,Node y) { return x.b>y.b; } int main() { int n,t; cin>>n>>t; for(int i=1;i<=n;i++) { cin>>a[i].m>>a[i].v; a[i].b=a[i].v/a[i].m; } sort(a+1,a+n+1,cmp); double ans=0; for(int i=1;i<=n;i++) { if(t<=0) break; if(t-a[i].m>0) { ans+=a[i].v; t-=a[i].m; } else { ans+=a[i].b*t; break; } } cout<<fixed<<setprecision(2)<<ans; return 0; }
|