/**
2017.3.25
Donald
*/
/**
思路:不用dp,
直接按其价值比,从高到底堆积。
*/
#include<bits/stdc++.h>
using namespace std;
#define MAXN 10001
int N; //物品的数目
int W; //荷载重量
//pair.second .first : weight, .second : value;
pair<double , pair<int, int> > Pair[MAXN];
void solve() {
double value = 0;
int remainWeight = W;
sort(Pair, Pair + N);
for (int i = N - 1; i >= 0; i --) {
if (remainWeight <= 0)
break;
if (Pair[i].second.first >= remainWeight) {
value += remainWeight * Pair[i].first;
remainWeight = 0;
// printf("value: %d , weight : %d\n", Pair[i].second.first, Pair[i].second.second);
} else {
value += Pair[i].second.second;
remainWeight -= Pair[i].second.first;
// printf("value: %d , weight : %d\n", Pair[i].second.first, Pair[i].second.second);
}
}
printf("%.1lf", value);
}
int main(void) {
int gi, pi;
double rate;
scanf("%d%d", &N, &W);
for (int i = 0 ; i < N; ++i) {
scanf("%d%d", &gi, &pi);
rate = pi * 1.0 / gi;
Pair[i].first = rate;
Pair[i].second.first = gi;
Pair[i].second.second = pi;
}
solve();
return 0;
}
算法提高 快乐司机
最新推荐文章于 2020-07-22 11:01:59 发布