您的位置:首页 > 其它

蓝桥杯 算法提高 快乐司机

2017-12-18 19:55 295 查看
问题描述

  “嘟嘟嘟嘟嘟嘟

  喇叭响

  我是汽车小司机

  我是小司机

  我为祖国运输忙

  运输忙”

  这是儿歌“快乐的小司机”。话说现在当司机光有红心不行,还要多拉快跑。多拉不是超载,是要让所载货物价值最大,特别是在当前油价日新月异的时候。司机所拉货物为散货,如大米、面粉、沙石、泥土……

  现在知道了汽车核载重量为w,可供选择的物品的数量n。每个物品的重量为gi,价值为pi。求汽车可装载的最大价值。(n<10000,w<10000,0

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
struct node {
double gi;
double pi;
double value;
}nod[10010];
int main() {
int n;
double w,sum=0;
cin >> n >> w;
for (int i = 0; i < n; i++) {
cin >> nod[i].gi >> nod[i].pi;
nod[i].value = nod[i].pi / nod[i].gi;
//cout << nod[i].value << endl;
}
bool flag = true;
while (w >0&&flag==true) {
flag = false;
double max = -1;
int sign;
for (int i = 0; i < n; i++) {
if (max < nod[i].value&&nod[i].gi>0) { //这里一定要加判定gi是否为0,否则max值一直为最大的那个
max = nod[i].value;
sign = i;
flag = true;
}
}
//cout << max << endl;
if (w >= nod[sign].gi) {
w = w - nod[sign].gi;
nod[sign].gi = 0;
sum += nod[sign].pi;
}
else {
sum += w*nod[sign].value;
nod[sign].gi = nod[sign].gi - w;
w = 0;
}
}
printf("%.1f\n", sum);
system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: