博客
关于我
【ybt高效进阶3-1-5】【POJ 1456】超市购物 / Supermarket
阅读量:332 次
发布时间:2019-03-04

本文共 1602 字,大约阅读时间需要 5 分钟。

超市购物问题的贪心解决方案

在这个问题中,我们需要在有限的时间内选择一天中价值最大的商品。每个商品都有一个最晚卖出时间,只能在此时间之前选择。我们的目标是最大化总价值。

思路分析

我们采用贪心算法来解决这个问题。贪心算法的核心思想是,在每一步做出局部最优选择,从而达到全局最优。具体来说:

  • 排序商品:将所有商品按最晚卖出时间从晚到早排序。如果两个商品的卖出时间相同,则按价值从高到低排序。
  • 使用优先队列:将商品按照上述排序依次处理。对于每个商品,我们尝试在其最晚卖出时间之前尽可能多地选择尚未处理的商品,并且在每个时间点选取当前队列中价值最高的商品。
  • 通过这种方式,我们可以确保在每个时间点都选择最优的商品,从而达到整体最大价值的目标。

    详细步骤

  • 输入处理:读取商品数量和各商品的价值与最晚卖出时间。
  • 排序:将商品按最晚卖出时间从晚到早排序,价值从高到低排序。
  • 贪心选择
    • 初始化最大价值为第一个商品的价值。
    • 对于每个后续商品,尝试在其最晚卖出时间之前尽可能多地从优先队列中取出未处理的商品。
    • 在每一步中,总是选择队列中价值最高的商品,直到无法再选择为止。
  • 代码实现

    #include 
    #include
    #include
    #include
    using namespace std;struct node { int x, t;};int main() { int n; while (scanf("%d", &n) != EOF) { priority_queue
    , less
    > q; struct node a[n + 1]; memset(a, 0, sizeof(a)); for (int i = 1; i <= n; ++i) { scanf("%d %d", &a[i].x, &a[i].t); } sort(a + 1, a + n + 1, [](const node& x, const node& y) { if (x.t != y.t) return x.t > y.t; return x.x > y.x; }); if (n == 0) { printf("0\n"); continue; } long long ans = a[1].x; for (int i = 2; i <= n; ++i) { q.push(a[i].x); if (a[i].t != a[i-1].t) { int delta = a[i-1].t - a[i].t; for (int j = 0; j < delta; ++j) { if (q.empty()) break; ans += q.top(); q.pop(); } } } for (int i = a[n].t - 1; i >= 1; --i) { if (q.empty()) break; ans += q.top(); q.pop(); } printf("%lld\n", ans); } return 0;}

    代码解释

  • 输入处理:使用scanf读取输入数据,初始化商品数量和各商品的价值与最晚卖出时间。
  • 排序:根据最晚卖出时间和价值对商品进行排序,确保在每一步都能选择最优商品。
  • 贪心选择
    • 初始化最大价值为第一个商品的价值。
    • 对于每个后续商品,尝试在其最晚卖出时间之前尽可能多地从优先队列中取出未处理的商品。
    • 在每一步中,总是选择队列中价值最高的商品,直到无法再选择为止。
  • 通过这种方法,我们可以高效地解决超市购物问题,确保在最短的时间内获得最大价值的商品组合。

    转载地址:http://yxvh.baihongyu.com/

    你可能感兴趣的文章
    MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
    查看>>
    mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
    查看>>
    mysql中出现Unit mysql.service could not be found 的解决方法
    查看>>
    mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
    查看>>
    Mysql中各类锁的机制图文详细解析(全)
    查看>>
    MySQL中地理位置数据扩展geometry的使用心得
    查看>>
    Mysql中存储引擎简介、修改、查询、选择
    查看>>
    Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
    查看>>
    mysql中实现rownum,对结果进行排序
    查看>>
    mysql中对于数据库的基本操作
    查看>>
    Mysql中常用函数的使用示例
    查看>>
    MySql中怎样使用case-when实现判断查询结果返回
    查看>>
    Mysql中怎样使用update更新某列的数据减去指定值
    查看>>
    Mysql中怎样设置指定ip远程访问连接
    查看>>
    mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
    查看>>
    Mysql中文乱码问题完美解决方案
    查看>>
    mysql中的 +号 和 CONCAT(str1,str2,...)
    查看>>
    Mysql中的 IFNULL 函数的详解
    查看>>
    mysql中的collate关键字是什么意思?
    查看>>
    MySql中的concat()相关函数
    查看>>