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. Spark入门(Python版)

    Hadoop是对大数据集进行分布式计算的标准工具,这也是为什么当你穿过机场时能看到”大数据(Big Data)”广告的原因.它已经成为大数据的操作系统,提供了包括工具和技巧在内的丰富生态系统,允许使用 ...

  2. P1113 杂务

    P1113 杂务 题目描述 John的农场在给奶牛挤奶前有很多杂务要完成,每一项杂务都需要一定的时间来完成它.比如:他们要将奶牛集合起来,将他们赶进牛棚,为奶牛清洗乳房以及一些其它工作.尽早将所有杂务 ...

  3. ATextAppearance.AppCompat.Small not found

    今天编译的代码的时候,刚才还是好的,后来吃个饭回来,就不行了. 报错如下: AGPBI: {"kind":"error","text":&q ...

  4. Servlet的5种方式实现表单提交(注册小功能)

    Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据   用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> ...

  5. C#函数库

    //读取文本文件并返回内容不同的那一行         public static String different(String sOldFile, String sNewFile)         ...

  6. MYSQL order by排序与索引关系总结

    MySQL InnoDB B-Tree索引使用Tips 这里主要讨论一下InnoDB B-Tree索引的使用,不提设计,只管使用.B-Tree索引主要作用于WHERE和ORDER BY子句.这里讨论的 ...

  7. 拼接index

    import MySQLdb import sys db = MySQLdb.connect(host="127.0.0.1", # your host, usually loca ...

  8. python基础之全局局部变量及函数参数

    1.局部变量和全局变量 1.1局部变量 局部变量是在函数内部定义的变量,只能在定义函数的内部使用 函数执行结束后,函数内部的局部变量会被系统收回 不同函数可以定义相同名字的局部变量,但是各用个的互不影 ...

  9. 如何理解一台服务器可以绑定多个ip,一个ip可以绑定多个域名

    一个域名只能对应一个IP的意思是域名在DNS服务器里做解析的时候 一条记录只能指向一个IP地址.这个是死规定,试想一下,如果一个子域名指向了2个ip ,当访问者打开这个域名的时候,浏览器是展示哪个IP ...

  10. 第一章 了解TCP/IP协议族

    第一章 了解TCP/IP协议族 1.1 TCP/IP协议族体系结构以及主要协议 IP和TCP协议对编写程序具有最直接的影响,后面的章节会详细的讲到. TCP/IP的体系结构有应用层,传输层,网络层,数 ...