题意:
超市里有N件商品,每件商品都有利润pi和过期时间di,每天只能卖一件商品,过期商品不能再卖。求合理安排每天卖的商品的情况下,可以得到的最大收益是多少。
输入格式:
输入包含多组测试用例。
每组测试用例,以输入整数N开始,接下来输入N对pi和di,分别代表第i件商品的利润和过期时间。在输入中,数据之间可以自由穿插任意个空格或空行,输入至文件结尾时终止输入,保证数据正确。
输出格式:
对于每组产品,输出一个该组的最大收益值。每个结果占一行。
题解:一道很容易想的贪心题目,我们可以这样想,因为每件物品都有一个价格和截止时间,这样的话,为了保证售出的总价格最大,那么我们在第i天肯定是要去卖价格高的那件商品了,所以我们首先按照商品价格来排序,这是第一个贪心策略。
第二个贪心策略:对于购买第i件物品,我们必然是越晚买越好,(防止其他日期早的商品购买不了),所以对于第i件物品我们在a[i].d天购买它,如果购买不了,那么我们就在a[i].d-1天购买,依次类推。
那么问题来了,我们怎么知道第i天是否卖了东西呢?
很简单因为日期的大小小于1e4,那么我们可以开一个visited数组来记录第i天是否卖出去了,如果没有卖出去,那就把之一天标记上并且加上当天的价格。
代码:

/*Keep on going Never give up*/
#pragma GCC optimize(3,"Ofast","inline")
#include <bits/stdc++.h>
const int maxn = 1e4+10;
const int MaxN = 0x3f3f3f3f;
const int MinN = 0xc0c0c00c;
typedef long long ll;
const int mod = 100000000;
using namespace std;
int visited[maxn];
struct wazxy{int p,d;
}a[maxn];
struct rule{bool operator ()(const wazxy &a,const wazxy & b){if(a.p!=b.p) return a.p>b.p;}
};int main(){int n;while(cin>>n){memset(visited,false,sizeof(visited));for(int i=1;i<=n;i++){scanf("%d%d",&a[i].p,&a[i].d);}sort(a+1,a+n+1,rule());int ans=0;for(int i=1;i<=n;i++){for(int j=a[i].d;j>=1;j--){if(visited[j]==false){ans+=a[i].p;visited[j]=true;break;}}}cout<<ans<<endl;}return 0;
}

[0x17基本数据结构-二叉堆]-Supermarket相关推荐

  1. 0x17.基础数据结构 - 二叉堆

    目录 一.二叉堆 二.例题 0.AcWing 145. 超市 AcWing 146. 序列(POJ 2442) 三.HuffmanHuffmanHuffman树 1.AcWing 148. 合并果子 ...

  2. 【数据结构与算法拓展】二叉堆原理、实现与例题(C和java)

    前言 数据结构,一门数据处理的艺术,精巧的结构在一个又一个算法下发挥着他们无与伦比的高效和精密之美,在为信息技术打下坚实地基的同时,也令无数开发者和探索者为之着迷. 也因如此,它作为博主大二上学期最重 ...

  3. 排序算法之——优先队列经典实现(基于二叉堆)

    许多应用都需要处理有序的元素,但有时,我们不要求所有元素都有序,或是一定要一次就将它们排序,许多情况下,我们会收集这些元素里的最大值或最小值. 这种情况下一个合适的数据结构应该支持两种操作:插入元素. ...

  4. 数据结构之优先队列--二叉堆(Java实现)

    前言 数据结构队列的学习中,我们知道队列是先进先出的.任务被提交到队列中,按照先进先出的原则 对各个任务进行处理.不过在现实的情况下,任务通常有着优先级的概念,例如短任务.管理员的操作 应该优先执行. ...

  5. 【数据结构与算法】二项队列与二叉堆的比较

    导语 二叉堆确实是入门级的重要数据结构了,而二项队列也是慢慢要去掌握的一种支持高效合并的优先队列实现.本文稍作比较,望抛砖引玉. 列个表格比较基本操作性能 基本操作 insert(平均) delete ...

  6. 【数据结构与算法】二叉堆V2.0的Java实现

    更新说明 我们在此前已经编写过简单版的二叉大根堆V1.0,这次,换成二叉小根堆,命名为二叉堆V2.0. 大家也知道,堆是完全二叉树,存储方式借助动态数组实现顺序存储,依赖于父子结点之间的index关系 ...

  7. 【数据结构与算法】二叉堆与二叉搜索树的区别

    问题描述 记得刚学习数据结构的时候,就容易混淆二叉堆和二叉搜索树,其实虽说堆也是一种完全二叉树,但二者差别还是挺大的,本文试做分析. 逻辑结构 二叉堆和二叉搜索树都是结点带权重,并在父子结点间满足某种 ...

  8. 《恋上数据结构第1季》二叉堆实现优先级队列

    优先级队列(Priority Queue) 优先级队列简介 优先队列的底层实现 二叉堆实现优先级队列源码 测试代码 数据结构与算法笔记目录:<恋上数据结构> 笔记目录 想加深 Java 基 ...

  9. 《恋上数据结构第1季》二叉堆原理及实现、最小堆解决 TOP K 问题

    二叉堆 BinaryHeap 堆(Heap) 堆的出现 堆简介 二叉堆(Binary Heap) 获取最大值 最大堆 - 添加 最大堆 - 添加优化 最大堆 - 删除 replace 最大堆 - 批量 ...

最新文章

  1. Docker官方文档翻译4
  2. oracle mysql 乱码_解决Oracle数据库中文乱码
  3. MIT提出Liquid机器学习系统,可像液体一样适应动态变化
  4. 计算机cmd shutdown,cmd里面shutdown命令的原因是什么?什么时候显示的?
  5. 计算机中,文本文件和二进制文件的区别
  6. JavaScript(三)——函数、变量作用域、方法
  7. ArcGIS 10.2中栅格数据的属性表问题
  8. vue.js视频课程_在此免费课程中学习Vue.js! ✨
  9. atlas 200 远程图形化桌面
  10. linux 命名空间Namespace机制【转】
  11. smarty3.1.30 模板引擎的使用
  12. openwrt路由器打印机服务器设置_OPENWRT网络打印机TCP/IP共享设置教程 以703N为例...
  13. LinuxTerminal_HotKey
  14. Eclipse搭建第一个Spring boot项目
  15. Unity_UIWidgets新手入门
  16. C语言中预编译/预处理的使用
  17. 《中国美食》习字优秀作品展示
  18. oss 照片图片处理 压缩图
  19. 日语学习-五十音清音
  20. bcd 增加 引导linux系统 mac os x 系统,系统引导维护工具 EasyBCD 2.4.0.237 中文多语免费版...

热门文章

  1. Redis数据库搭建集群(集群概念、redis集群、搭建集群(配置机器1、2、创建集群、数据操作验证)、Python与redis集群交互)
  2. 爬虫之requests模块中cookies参数的使用
  3. YOLO-v4目标检测实时手机端实现
  4. 3D视觉应用开发--机器人3D互动四大技术难点分析
  5. vue-cli3.0 生产包去除console.log
  6. 【Interfacenavigation】通知概述(36)
  7. ​防火墙(一)主机型防火墙
  8. idea导入gradle
  9. Java局部变量final
  10. 状态机在计算机中的应用