一开始思路弄错了,刚开始想的时候误把所有截止时间为2的不一定一定要在2的时候买,而是可以在1的时候买。

举个例子:

50 2  10 1   20 2   10 1    50+20

50 2  40 4   30 4   20 1  10 1      20+50+30+40

思路:用优先级队列,每次取价格最大的(如果价格相同,取截止时间最大的)。

   然后往1~maxdx里加,首先看它截止时间上的位置是否已经存在其他物品,如果不存在,就加到该处。

   如果存在,就往前判断,直到有一处空位没被占用,就加入到该位置。

后来网上看了一下,可以用并查集查找不冲突的时间点

不用并查集优化,110ms;用并查集后,63ms

#include <iostream>
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
const int maxn=; int n;
int vis[maxn]; //若vis[i]=1,表示此处已经有物品,即有物品在i时刻卖出
int maxdx=; //用于记录所有物品中最大的截止时间
int f[maxn];
struct Product{
int price,deadtime; bool operator <(const Product tmp) const{
if(price==tmp.price)
return deadtime<tmp.deadtime;
else
return price<tmp.price;
}
}; void init(){
for(int i=;i<=maxdx;i++){
f[i]=i;
}
}
int find_root(int x){
if(f[x]!=x)
f[x]=find_root(f[x]);
return f[x];
}
int main()
{ int p,d;
int ans,counts;
Product tmp;
while(scanf("%d",&n)!=EOF){
priority_queue<Product> q;
maxdx=;
memset(vis,,sizeof(vis));
for(int i=;i<=n;i++){
scanf("%d%d",&p,&d);
if(d>maxdx)
maxdx=d;
tmp.price=p;
tmp.deadtime=d;
q.push(tmp); }
init();
ans=;
counts=; //用于记录所卖的物品个数,如果个数为maxdx,表明1~maxdx中的所有时刻都已有物品在卖
while(counts<maxdx && !q.empty()){
tmp=q.top();
q.pop();
if(vis[tmp.deadtime]==){
ans+=tmp.price;
vis[tmp.deadtime]=;
f[tmp.deadtime]=tmp.deadtime-; //刚开始这里忘写了,导致WA
counts++;
}
else{
int t=tmp.deadtime;
int pos=find_root(t);
if(pos>){
vis[pos]=;
counts++;
ans+=tmp.price;
f[pos]=pos-;
}
/*
while(vis[t]==1){
t--;
}
if(t>0){
vis[t]=1;
ans+=tmp.price;
counts++;
}
*/
} }
printf("%d\n",ans);
}
return ;
}

POJ 1456 Supermarket(贪心+并查集优化)的更多相关文章

  1. POJ 1456——Supermarket——————【贪心+并查集优化】

    Supermarket Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  ...

  2. Supermarket---poj456(贪心并查集优化)

    题目链接:http://poj.org/problem?id=1456 题意是现有n个物品,每个物品有一个保质期和一个利润,现在每天只能卖一个商品,问最大的利润是多少,商品如果过期了就不能卖了: 暴力 ...

  3. poj1456 Supermarket 贪心+并查集

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

  4. POJ 1456 - Supermarket - [贪心+小顶堆]

    题目链接:http://poj.org/problem?id=1456 Time Limit: 2000MS Memory Limit: 65536K Description A supermarke ...

  5. nyoj 208 + poj 1456 Supermarket (贪心)

    Supermarket 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 A supermarket has a set Prod of products on sal ...

  6. POJ 1456 Supermarket(贪心+并查集)

    题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...

  7. POJ 1456 (贪心+并查集) Supermarket

    有n件商品,每件商品有它的利润和售出的最后期限,问能够得到的最大利润是多少 这道题和 HDU 1789 Doing Homework again 几乎一模一样,只不过这个是求最的扣分,本题是求最大利润 ...

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

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

  9. Supermarket(贪心/并查集)

    题目链接 原创的博客 题意: 超市里有N个商品. 第i个商品必须在保质期(第di天)之前卖掉, 若卖掉可让超市获得pi的利润. 每天只能卖一个商品. 现在你要让超市获得最大的利润. n , p[i], ...

随机推荐

  1. 济南学习 Day 3 T2 pm

    LYK 快跑!(run)Time Limit:5000ms Memory Limit:64MB题目描述LYK 陷进了一个迷宫! 这个迷宫是网格图形状的. LYK 一开始在(1,1)位置, 出口在(n, ...

  2. extern 数组

    最近比较关注C++对象的Linkage类型,然后今天突然想起extern数组这个奇葩的东西,稍微折腾了一下,顺手写个随笔. 首先在cpp中定义几个数组: ,,,,}; ,,,,}; ,,,,}; 然后 ...

  3. BootstrapDialog自动加<br> BUG处理

    用惯了其他的ui框架 ,综合感觉BootstrapDialog算是最好的一个了. 因为不想在js中写过多的html代码,所以习惯的写法,把代码写在html中,js引用 实例如下: html代码 < ...

  4. WInform启动另一个项目传值

    背景:从A项目中登陆后,跳转到B项目的某个页面(B不再登陆). A项目启动进程: public Form1() { InitializeComponent(); } #region 调用进程 [Dll ...

  5. C# WinForm设置TreeView选中节点

    这里假定只有两级节点,多级方法类似.遍历节点,根据选中节点文本找到要选中的节点.treeView.SelectedNode = selectNode; /// <summary> /// ...

  6. 如何访问Microsoft Azure Storage

    首先先要创建存储账户 http://www.cnblogs.com/SignalTips/p/4119128.html 可以通过以下的几个方式访问 通过Visual Studio 2013 Commu ...

  7. hdu 2837 Calculation 指数循环节套路题

    Calculation Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total ...

  8. 16、WPF中的命令

    一.前言 事件的作用是发布.传播一些信息,消息送达接收者,事件的使命就算完成了,至于如何响应事件送来的消息事件并不做规定,每个接收者可以使用自己的行为来响应事件,也就是说事件不具有约束力.命令能够在代 ...

  9. linux驱动路径

    1. 按键驱动 \drivers\input\keyboard\utu2440_buttons.c 2. LED驱动 \drivers\char\utu2440-led.c 3. DM9000网卡驱动 ...

  10. phpstrom 7.0 序列号

    phpstrom 7.0 用户名 www.goipc.cn license key 13748-1204201000001dZdtN0KxZbl8zNH8RHFCz9t"gjKv9yXf2c ...