Supermarket
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 14656   Accepted: 6656

Description

A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral number of time units starting from the moment the sale begins. Each product takes precisely one unit of time for being sold. A selling schedule is an ordered subset of products Sell ≤ Prod such that the selling of each product x∈Sell, according to the ordering of Sell, completes before the deadline dx or just when dx expires. The profit of the selling schedule is Profit(Sell)=Σx∈Sellpx. An optimal selling schedule is a schedule with a maximum profit.
For example, consider the products Prod={a,b,c,d} with
(pa,da)=(50,2), (pb,db)=(10,1), (pc,dc)=(20,2), and (pd,dd)=(30,1). The
possible selling schedules are listed in table 1. For instance, the
schedule Sell={d,a} shows that the selling of product d starts at time 0
and ends at time 1, while the selling of product a starts at time 1 and
ends at time 2. Each of these products is sold by its deadline. Sell is
the optimal schedule and its profit is 80.



Write a program that reads sets of products from an input text file
and computes the profit of an optimal selling schedule for each set of
products.

Input

A set
of products starts with an integer 0 <= n <= 10000, which is the
number of products in the set, and continues with n pairs pi di of
integers, 1 <= pi <= 10000 and 1 <= di <= 10000, that
designate the profit and the selling deadline of the i-th product. White
spaces can occur freely in input. Input data terminate with an end of
file and are guaranteed correct.

Output

For
each set of products, the program prints on the standard output the
profit of an optimal selling schedule for the set. Each result is
printed from the beginning of a separate line.

Sample Input

4  50 2  10 1   20 2   30 1

7  20 1   2 1   10 3  100 2   8 2
5 20 50 10

Sample Output

80
185

Hint

The sample input contains two product sets. The first set encodes the products from table 1. The second set is for 7 products. The profit of an optimal schedule for these products is 185.
 
Solution:
本题题意就是给定n个物品,每个物品有价值和过期时间,在保证卖出的物品不过期的情况下求最大收益。
思路就是贪心,显然对于到了第x天时,我们应该尽量卖出的是在不过期情况下的价值前x大的物品。
于是我们可以先将物品按过期时间从小到大排序,然后依次扫描每个物品:若当前物品的过期天数大于当前小根堆中物品个数,那么就直接插入小根堆中;若当前物品的过期天数等于当前堆中的物品个数,如果该物品价值也大于堆顶的物品价值,则pop出堆顶并插入该物品。
最后小根堆中剩下的物品价值和就是ans了。
 
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<queue>
#define il inline
#define ll long long
#define N 100005
using namespace std;
int n;
struct object{
int p,d;
}a[N];
il bool cmp(object a,object b){return a.d<b.d;}
priority_queue<int,vector<int>,greater<int> >q;
int main()
{
while(scanf("%d",&n)==)
{
int cnt=,ans=;
for(int i=;i<=n;i++)scanf("%d%d",&a[i].p,&a[i].d);
sort(a+,a+n+,cmp);
for(int i=;i<=n;i++)
if(a[i].d>cnt){cnt++;q.push(a[i].p);}
else if(a[i].d==cnt){
if(a[i].p>q.top())q.pop(),q.push(a[i].p);
}
while(!q.empty())ans+=q.top(),q.pop();
printf("%d\n",ans);
}
return ;
}

poj1456——Supermarket的更多相关文章

  1. POJ1456 Supermarket 并查集

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - POJ1456 题意概括  一家超市,要卖出N种物品(每种物品各一个),每种物品都有一个卖出截止日期Di(在该 ...

  2. POJ-1456 Supermarket(贪心,并查集优化)

    Supermarket Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10725 Accepted: 4688 Descript ...

  3. POJ1456 supermarket [堆]

    题目传送门 Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 15192   Accepted: 685 ...

  4. poj1456 Supermarket[另类的并查集做法]

    1.Supermarket(题目地址) 跟很久以前模拟的打地鼠那题一样,贪心+优先队列.这次换用并查集做法. 还是基于贪心,但这次换一种策略,先选价值最大的, 同时使其尽可能晚的被选上(因为早选会将之 ...

  5. POJ1456 Supermarket —— 贪心 + 路径压缩优化

    题目链接:http://poj.org/problem?id=1456 Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Subm ...

  6. POJ-1456 Supermarket 贪心问题 有时间限制的最小化惩罚问题

    题目链接:https://cn.vjudge.net/problem/POJ-1456 此题与HDU-1789完全是一道题 题意 有N件商品,分别给出商品的价值和销售的最后期限,只要在最后日期之前销售 ...

  7. POJ1456 Supermarket 贪心

    贪心策略:一定先卖价值最大的,然后考虑卖当前的物品,卖的日期越靠后,越优,可以为以后的物品提供机会 #include <stdio.h> #include <string.h> ...

  8. poj1456 Supermarket 贪心+并查集

    题目链接:http://poj.org/problem?id=1456 题意:有n个物品(0 <= n <= 10000) ,每个物品有一个价格pi和一个保质期di (1 <= pi ...

  9. poj1456 Supermarket

    书上用的方法是正着按照天数推,如果任务大于小根堆顶就替换,天数多于任务就加. 而我依稀记得以前洛谷上有一题也是这个,用时光倒流来求解,天数倒推,加任务,取大根堆顶即可. 我的代码实现: #includ ...

随机推荐

  1. 长沙Uber优步司机奖励政策(12月28日到1月3日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. Netty示例

    一,服务端 ** * 测试Netty类库:服务端代码 * Created by LiuHuiChao on 2016/10/24. */ public class NettyServerTest { ...

  3. mySql——case when else ....demo

    DROP PROCEDURE IF EXISTS Pro_query_change_charge_by_layer_report; CREATE PROCEDURE Pro_query_change_ ...

  4. oradebug 的学习 一

        说明 oradebug主要是给oracle支持人员使用的,尽管很早便有,但oracle官网很少有记载.他是个sql*plus命令行工具,有sysdba的权限就可以登入,无需特别设置.他可以被用 ...

  5. 第三模块:面向对象&网络编程基础 第4章 FTP项目作业讲解

    01-FTP项目需求 02-FTP项目框架搭建 03-FTP项目用户认证 04--FTP项目制定标准定长消息头 05-FTP项目下载功能开发 06-FTP项目下载功能开发2 07-FTP项目ls文件列 ...

  6. 【quick-cocos2d-lua】 基本类及用法

    1.cc.Director(导演类) 获得导演类实例:local  director = cc.Director : getInstance() 其中 cc 是Cocos2d-x Lua 类的命名空间 ...

  7. 配置vConsole调试console

    1.使用 npm 安装: npm install vconsole 再使用webpack,然后js代码中 import VConsole from 'vconsole/dist/vconsole.mi ...

  8. 【jmeter进阶之逻辑控制器】

    jmeter进阶之逻辑控制器  转载   https://www.cnblogs.com/malinalian/p/10491946.html   常用的逻辑控制器 1,循环控制器:可以设置该控制器内 ...

  9. C二维数组行为空,列不为空

    二维数组: 处理二维数组得函数有一处可能不太容易理解:数组的行可以在函数调用时传递,但是数组的列却只能被预置在函数内部. eg: #define COLS 4 int sum(int ar[][COL ...

  10. Train Problem(栈的应用)

    Description As the new term comes, the Ignatius Train Station is very busy nowadays. A lot of studen ...