您的位置:首页 > 其它

算法提高 快乐司机

2017-03-26 16:29 323 查看



/**
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  蓝桥杯 算法