蓝桥杯 贪心模板 _算法提高 快乐司机

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
using namespace std;

const int maxn = 10000 + 200;
struct Lorry {
    float weight;
    float value;
    float pro;
    Lorry(float w = 0, float v = 0, float pro = 0) :
        weight(w), value(v), pro(pro) {}
} lorry[maxn]; 

//按价值率降序排序
bool cmp(const Lorry& a, const Lorry& b)
{
    return a.pro > b.pro;
}

void solve();

void solve()
{
    int n;
    float w; //物品数量, 核载重量
    float ans = 0;
    scanf("%d", &n);
    cin >> w;
    for (int i = 0; i < n; i++) {
        cin >> lorry[i].weight >> lorry[i].value;
        lorry[i].pro = lorry[i].value / lorry[i].weight;
    }
    //价值高的在前
    sort(lorry, lorry + n, cmp);

    for (int i = 0; i < n; i++)
    {
        if (w == 0) break;
        //w > l[i].weight 放心减就好了
        if (w - lorry[i].weight > 0) {
            w -= lorry[i].weight;
            ans += lorry[i].value;
        } else {
            //否则..全部用来给w, 还有剩余,单价最高嘛
            ans += lorry[i].pro * w;
            lorry[i].weight -= w;
            w = 0;
        }
    }
    printf("%.1f\n", ans);
}

int main()
{
    solve();
    return 0;
}

//好多简单题贪心算法,都需要定义结构体来组合数据, 并且提供比较函数,方便sort函数排序, 像这样~

struct Lorry {
    float weight;
    float value;
    float pro;        //单价
    Lorry(float w = 0, float v = 0, float pro = 0) :
        weight(w), value(v), pro(pro) {}
} lorry[maxn]; 

//按价值率降序排序
bool cmp(const Lorry& a, const Lorry& b)
{
    return a.pro > b.pro;
}

//来用这个模板写一题,Codevs上的快乐牛奶

#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;

const int maxM = 5000 + 20;   //农民数量
struct Milk {
    int amount;
    int value;
    Milk(int m = 0, int v = 0) : amount(m), value(v) {}
} Farmer[maxM];

void solve();

//按照价格 升序排序
bool cmp(const Milk& a, const Milk& b) {
    return a.value < b.value;
}

void solve()
{
    int N, M;   // N -- 需求, M -- 农民数目
    int ans = 0;
    scanf("%d%d", &N, &M);
    //硬币问题
    //最少价格, 刚刚好 N 数量
    //应该每次 挑选 单价最低的
    for (int i = 0; i < M; i++) {
        //输入价格 and 数量
        scanf("%d%d", &Farmer[i].value, &Farmer[i].amount);
    }
    //按照价格 升序排序
    sort(Farmer, Farmer + M, cmp);
    for (int i = 0; i < M; i++)
    {//每次选价格低的先 大于0再执行下面,如果刚刚好为0,则不好直接退出
        if (N - Farmer[i].amount > 0) {
            N -= Farmer[i].amount;
            ans += Farmer[i].amount*Farmer[i].value;
        } else {
            for (int j = 1; j <= Farmer[i].amount; j++) {
                if (N - j == 0) {
                    N = 0;
                    ans += Farmer[i].value * j;
                    printf("%d\n", ans);
                    return;
                }
            }
        }
    }
    printf("%d\n", ans);

}

int main()
{
    solve();
    return 0;
}
时间: 2024-07-30 06:07:52

蓝桥杯 贪心模板 _算法提高 快乐司机的相关文章

算法提高 快乐司机

时间限制:1.0s   内存限制:256.0MB 问题描述 "嘟嘟嘟嘟嘟嘟 喇叭响 我是汽车小司机 我是小司机 我为祖国运输忙 运输忙" 这是儿歌"快乐的小司机".话说现在当司机光有红心不行,还要多拉快跑.多拉不是超载,是要让所载货物价值最大,特别是在当前油价日新月异的时候.司机所拉货物为散货,如大米.面粉.沙石.泥土...... 现在知道了汽车核载重量为w,可供选择的物品的数量n.每个物品的重量为gi,价值为pi.求汽车可装载的最大价值.(n<10000,w

16年第七届蓝桥杯第九题_密码脱落_(贪心)

密码脱落 X星球的考古学家发现了一批古代留下来的密码.这些密码是由A.B.C.D 四种植物的种子串成的序列.仔细分析发现,这些密码串当初应该是前后对称的(也就是我们说的镜像串).由于年代久远,其中许多种子脱落了,因而可能会失去镜像的特征. 你的任务是:给定一个现在看到的密码串,计算一下从当初的状态,它要至少脱落多少个种子,才可能会变成现在的样子. 输入一行,表示现在看到的密码串(长度不大于1000)要求输出一个正整数,表示至少脱落了多少个种子. 例如,输入:ABCBA则程序应该输出:0 再例如,

第四届蓝桥杯javaC组_马虎的算式

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了. 有一次,老师出的题目是:36 x 495 = ? 他却

第四届蓝桥杯javaC组_第39级台阶

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小明刚刚看完电影<第39级台阶>,离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着

第四届蓝桥杯javaC组_有理数类

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 有理数就是可以表示为两个整数的比值的数字.一般情况下,我们用近似的小数表示.但有些时候,不允许出现误差,必须用两个整数

第四届蓝桥杯javaC组_核桃的数量

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小张是软件项目经理,他带领3个开发组.工期紧,今天都在加班呢.为鼓舞士气,小张打算给每个组发一袋核桃(据传言能补脑).

第四届蓝桥杯javaC组_打印十字图

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小明为某机构设计了一个十字型的徽标(并非红十字会啊),如下所示(可参见p1.jpg) 对方同时也需要在电脑dos窗口中

第四届蓝桥杯javaC组_买不到的数目

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 问题描述: 小明开了一家糖果店.他别出心裁:把水果糖包成4颗一包和7颗一包的两种.糖果不能拆包卖. 小朋友来买糖的时候,他就用这两

第三届蓝桥杯javaC组_放麦子

/* (程序头部注释开始) * 程序的版权和版本声明部分 * Copyright (c) 2016, 广州科技贸易职业学院信息工程系学生 * All rights reserved. * 文件名称: 蓝桥杯赛题 * 作    者:   彭俊豪 * 完成日期:   2016   年 04月 01日 * 版 本 号:      001 * 对任务及求解方法的描述部分 * 输入描述: 无 * 问题描述: 你一定听说过这个故事.国王对发明国际象棋的大臣很佩服,问他要什么报酬,大臣说:请在第1个棋盘格放1