poj1456

原创 2012年03月22日 00:34:36
Supermarket
Time Limit: 2000MS   Memory Limit: 65536K
Total Submissions: 6349   Accepted: 2624

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



#include<iostream>
#include<stdio.h>
#include<algorithm>
#include<string.h>
using namespace std;
struct NODE
{
    int profit,deadline;
};
NODE node[10000+1];
bool selected[10000+1];
bool cmp(const NODE &n1,const NODE &n2)
{
    if(n1.profit>n2.profit)return true;
    else
    {
        if(n1.profit<n2.profit)return false;
        return n1.deadline<n2.deadline;
    }
}
int main()
{
    int n;
    while(scanf("%d",&n)==1)
    {
        for(int i=1;i<=n;i++)
        {
            scanf("%d%d",&node[i].profit,&node[i].deadline);
        }
        sort(node+1,node+n+1,cmp);
        int sum=0;
        memset(selected,0,sizeof(selected));
        selected[0]=0;
        for(int i=1;i<=n;i++)
        {
            int t=node[i].deadline;
            while(selected[t])t--;
            if(t!=0)
            {
                selected[t]=1;
                sum+=node[i].profit;
            }
        }
        printf("%d\n",sum);
    }
    return 0;
}


POJ1456Supermarket(贪心+优先队列)

Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 9103   Ac...
  • u010372095
  • u010372095
  • 2014年08月11日 22:47
  • 1238

poj1456(贪心)

A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold ...
  • small__snail__5
  • small__snail__5
  • 2017年05月03日 11:35
  • 148

POJ1456(贪心)

POJ1456
  • Ema1997
  • Ema1997
  • 2016年02月25日 11:18
  • 183

POJ1456解题报告

本来想用这道题练习UFS,但是实在没有想出UFS的想法,于是写了个堆。贪心思路是:按时间降序贪心,每次放能放的最大的。代码如下:  #include using namespace std...
  • TA201314
  • TA201314
  • 2014年11月05日 16:28
  • 494

poj1456(两种做法)

带时限的作业排序~~ #include #include #include #include using namespace std; struct node { int p...
  • fengsigaoju
  • fengsigaoju
  • 2016年02月13日 19:20
  • 202

【POJ1456】【并查集变形】【技巧】

Supermarket Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 10327   A...
  • u013200703
  • u013200703
  • 2015年08月25日 13:12
  • 288

poj1456 并查集or线段树

本来做并查集专题看到的题目,但是却是用线段树A掉的。。。并查集思路一会研究下,感觉这题用线段树做挺水的。 题目给的最后期限,就相当于给了线段树查找范围,在1~d范围内找还有没有空余的点,有的话则占用,...
  • u011663071
  • u011663071
  • 2014年03月07日 22:28
  • 782

poj1456(贪心加并查集)

题意:给出一些物品的利润和卖出的截至日期(即过了这个日期此物品就不能再卖出),每一天最多只能卖一件物品。问能获得的最大利润是多少。 解题思路:大体就是贪心吧。其中用到了类似于并查集的工具; 先按照物...
  • xiefubao
  • xiefubao
  • 2014年01月16日 16:38
  • 366

POJ1456 Supermarket简单贪心(无优化)题解

POJ原题地址:http://poj.org/problem?id=1456 看完题目很容易就想到,花一个单位时间获得最大的利润是最划算的,于是我们的工作就是往每个单位时间填充最大的利润,也就是贪心...
  • C20161009
  • C20161009
  • 2016年01月25日 11:15
  • 533

POJ1456贪心(set或者并查集区间合并)

题意:       给你n商品,每个商品有自己的价值还有保质期,一天最多只能卖出去一个商品,问最大收益是多少? 思路:       比较好想的贪心,思路是这样,每一次我们肯定拿价值最大的...
  • u013761036
  • u013761036
  • 2015年02月06日 16:40
  • 454
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:poj1456
举报原因:
原因补充:

(最多只允许输入30个字)