实获信息系统 公众号二维码
Problem1576--藏宝洞

1576: 藏宝洞

Time Limit: 1.000 Sec  Memory Limit: 128 MB
Submit: 270  Solved: 116
[Submit] [Status] [Web Board] [Creator:]

Description



阿里巴巴走进了装满宝藏的藏宝洞。

藏宝洞里面有 N(N≤100)N(N≤100) 堆金币,第 ii 堆金币的总重量和总价值分别是 mi,vimi,vi,阿里巴巴有一个承重量为 T(T≤1000)T(T≤1000) 的背包,但并不一定有办法将全部的金币都装进去。他想装走尽可能多价值的金币。所有金币都可以随意分割,分割完的金币重量价值比(也就是单位价格)不变。

请问阿里巴巴最多可以拿走多少价值的金币?

【输入格式】

第一行两个整数 N,TN,T

接下来 NN 行,每行两个整数 mi,vi(0<mi<105,0<vi<105)mi,vi(0<mi<105,0<vi<105)

【输出格式】

一个实数表示答案,输出两位小数 


Sample Input

4 50 
10 60 
20 100
30 120
15 45

Sample Output

240.00

HINT

#include<bits/stdc++.h>
using namespace std;
int n,zw,w[101],m[101];
double a[101],ans=0;
int main(){
cin>>n>>zw;
for(int i=1;i<=n;i++){
cin>>w[i]>>m[i];
a[i]=1.0*m[i]/w[i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<n;j++){
if(a[j+1]>a[j]){
swap(a[j+1],a[j]);
swap(w[j+1],w[j]);
swap(m[j+1],m[j]);
}

}
for(int i=1;i<=n;i++){
if(zw-w[i]>0){
zw=zw-w[i];
ans=ans+m[i];
}
else{
ans=ans+a[i]*zw;
break;
}
}
printf("%.2lf",ans);


Source/Category


[Submit] [Status]