传送门

1.贪心 + 优先队列

按照时间排序从前往后

很简单不多说

——代码

  1. #include <queue>
  2. #include <cstdio>
  3. #include <iostream>
  4. #include <algorithm>
  5. #define N 10001
  6.  
  7. int n, t, ans;
  8. std::priority_queue <int, std::vector <int>, std::greater <int> > q;
  9.  
  10. struct node
  11. {
  12. int a, b;
  13. }p[N];
  14.  
  15. inline int read()
  16. {
  17. int x = , f = ;
  18. char ch = getchar();
  19. for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -;
  20. for(; isdigit(ch); ch = getchar()) x = (x << ) + (x << ) + ch - '';
  21. return x * f;
  22. }
  23.  
  24. inline bool cmp(node x, node y)
  25. {
  26. return x.b < y.b;
  27. }
  28.  
  29. int main()
  30. {
  31. int i, j;
  32. while(~scanf("%d", &n))
  33. {
  34. t = ;
  35. ans = ;
  36. while(!q.empty()) q.pop();
  37. for(i = ; i <= n; i++) p[i].a = read(), p[i].b = read();
  38. std::sort(p + , p + n + , cmp);
  39. for(i = ; i <= n; i++)
  40. {
  41. if(t <= p[i].b)
  42. {
  43. t++;
  44. ans += p[i].a;
  45. q.push(p[i].a);
  46. }
  47. else if(t == p[i].b + && q.top() < p[i].a)
  48. {
  49. ans += p[i].a - q.top();
  50. q.pop();
  51. q.push(p[i].a);
  52. }
  53. }
  54. printf("%d\n", ans);
  55. }
  56. return ;
  57. }

2.并查集

很难想

按照价格从大到小排序

如果当前的那一天没有被占用,那么就用当前那一天,如果当前那一天被占用了,就用上一天,如果还被占用,再往前

其实这就是暴力过程

可以用并查集优化,当前天被占用时用并查集连接上一天,如果根指向0,就表明前面的天都被占用了,也就不用加

具体看代码

——代码

  1. #include <cstdio>
  2. #include <iostream>
  3. #include <algorithm>
  4. #define N 10001
  5.  
  6. int n, ans;
  7. int f[N];
  8.  
  9. struct node
  10. {
  11. int a, b;
  12. }p[N];
  13.  
  14. inline bool cmp(node x, node y)
  15. {
  16. return x.a > y.a;
  17. }
  18.  
  19. inline int find(int x)
  20. {
  21. return x == f[x] ? x : f[x] = find(f[x]);
  22. }
  23.  
  24. inline int read()
  25. {
  26. int x = , f = ;
  27. char ch = getchar();
  28. for(; !isdigit(ch); ch = getchar()) if(ch == '-') f = -;
  29. for(; isdigit(ch); ch = getchar()) x = (x << ) + (x << ) + ch - '';
  30. return x * f;
  31. }
  32.  
  33. int main()
  34. {
  35. int i, x;
  36. while(~scanf("%d", &n))
  37. {
  38. ans = ;
  39. for(i = ; i < N; i++) f[i] = i;
  40. for(i = ; i <= n; i++) p[i].a = read(), p[i].b = read();
  41. std::sort(p + , p + n + , cmp);
  42. for(i = ; i <= n; i++)
  43. {
  44. x = find(p[i].b);
  45. if(x)
  46. {
  47. f[x] = x - ;
  48. ans += p[i].a;
  49. }
  50. }
  51. printf("%d\n", ans);
  52. }
  53. return ;
  54. }

[POJ1456]Supermarket(贪心 + 优先队列 || 并查集)的更多相关文章

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

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

  2. A - A Supermarket (贪心, 并查集)

    超市里有n个产品要卖,每个产品都有一个截至时间dx(从开始卖时算起),只有在这个截至时间之前才能卖出并且获得率润dy. 有多个产品,所有可以有不同的卖出顺序,每卖一个产品要占用1个单位的时间,问最多能 ...

  3. Luogu 1525 【NOIP2010】关押罪犯 (贪心,并查集)

    Luogu 1525 [NOIP2010]关押罪犯 (贪心,并查集) Description S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨 ...

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

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

  5. poj1456 Supermarket 贪心+并查集

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

  6. POJ 1456 Supermarket 区间问题并查集||贪心

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

  7. 1202. [HNOI2005]狡猾的商人【贪心 或 并查集】

    Description 刁姹接到一个任务,为税务部门调查一位商人的账本,看看账本是不是伪造的.账本上记录了n个月以来的收入情况,其中第i 个月的收入额为Ai(i=1,2,3...n-1,n), .当 ...

  8. NYOJ 208 Supermarket (模拟+并查集)

    题目链接 描述 A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Pr ...

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

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

随机推荐

  1. luoguP2939 [USACO09FEB]改造路Revamping Trails

    约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 速公路. ...

  2. win10系统下,开启数据库远程连接方式

    右键左下角的windows标志,选择控制面板 2.查看方式修改为大图标 3.选择高级设置 4.新建入站规则 5.选择端口然后下一步 6.选择tcp协议,端口输入80,3306 7.选择允许连接 8.规 ...

  3. markdownpad2下载安装教程

    1.下载安装 http://markdownpad.com/download/markdownpad2-setup.exe 直接下载,安装过程中提醒要安装微软的一个什么环境,不用理会直接跳过,实测没有 ...

  4. 【翻译】- EffectiveAkka-第二章(一)

    Actor使用模式 现在我们已经了解了可以创建的actor系统的不同类型,那么我们在编写基于actor的应用程序时,可以采用什么样的使用模式,以便避免出现常见错误呢? 下面就让我们看看其中使用模式. ...

  5. 大数据插入Excel报错处理

    发现问题: 最近运行程序时,发现了一个问题,就是在导出excel时,报了一下错误 分析问题: 原来是由于NPOI这个动态库导致的,然后看了下版本,发现是1.2.5.然后百度了下,发现这个版本的NPOI ...

  6. 【转】Java 集合系列04之 fail-fast总结(通过ArrayList来说明fail-fast的原理、解决办法)

    概要 前面,我们已经学习了ArrayList.接下来,我们以ArrayList为例,对Iterator的fail-fast机制进行了解.内容包括::1 fail-fast简介2 fail-fast示例 ...

  7. TensorFlow-Gpu环境搭建——Win10+ Python+Anaconda+cuda

    参考:http://blog.csdn.net/sb19931201/article/details/53648615 https://segmentfault.com/a/1190000009803 ...

  8. JS——放大镜

    放大镜: 1.比例系数要恒定:在系数为4的情况下,若原图是820*512,那么小图必须是205*128,放大镜若是50,原图显示区域必须200 2.计算鼠标在小图中的坐标 3.放大镜需要在鼠标中间位置 ...

  9. 错误处理:vmware下克隆centos7配置静态ip地址网卡问题

    vmware下克隆centos7,在配置静态ip地址,重启网卡存在问题,还是mac地址问题 ip addr show 查看下mac地址,配置文件修改下,重启网卡正常了

  10. WPF在win7运行时报'Initialization of 'System.Windows.Setter' threw an exception.'

    写的一个WPF程序,在win10运行好好的,在win7就报'Initialization of 'System.Windows.Setter' threw an exception.' 原来是xaml ...