POJ Supermarket
来源:互联网 发布:数组排序jquery 编辑:程序博客网 时间:2024/05/01 00:48
Supermarket
题目链接:Click Here~
题目分析:
一个商店里有N个商品,而每个商品都有他自己最晚售出的时间和利润,商品只有在规定的时间内售出,才能得到他的利润。要求你求出最大的利润。
算法分析:
一开始的时候虽然想到了贪心,但是没想到这也可以和并查集挂上勾,orz。就是用贪心的思想加上并查集的查找判定就可以了,太神奇了!但是还有一个问题,怎么用并查集判断呢?哈哈,这里就有一个技巧了。我们可以记录每一个时间是否使用过,如果该点时间使用过,这我们把他的父亲指向下一个时间点。则下一次查找的时间就可以直接找到了。而我们用了贪心的思想又可以保证了在同一时间点拿最大的物品价值,所以最后的结果当然会是最优的。
#include <iostream>#include <algorithm>#include <queue>#include <cstdio>#include <cstring>using namespace std;const int MAXN = 1e4 + 5;struct Node{ int time,price; bool operator <(const Node &rhx)const{ return price != rhx.price?price > rhx.price:time < rhx.time; }}node[MAXN];int f[MAXN];int Find(int x){ if(f[x]==-1) return x; return f[x] = Find(f[x]);}int main(){ int n; while(~scanf("%d",&n)) { memset(f,-1,sizeof(f)); for(int i = 0;i < n;++i) scanf("%d%d",&node[i].price,&node[i].time); sort(node,node+n); int sum = 0; for(int i = 0;i < n;++i){ int a = Find(node[i].time); if(a!=0){ f[a] = a-1; sum += node[i].price; } } printf("%d\n",sum); } return 0;}
0 0
- POJ Supermarket
- POJ Supermarket
- Supermarket POJ
- POJ 1297 Supermarket
- poj 1456 supermarket
- POJ-1456 Supermarket【贪心】
- poj 1456 Supermarket
- poj 1456.Supermarket
- Supermarket poj 1456
- POJ 1456 Supermarket
- POJ 1456 Supermarket
- POJ-1456-Supermarket
- poj 1456 Supermarket
- poj 1456 Supermarket
- POJ - 1456 Supermarket
- POJ 1456 Supermarket
- POJ 1456 Supermarket
- POJ 1456 Supermarket
- 城管打人后,没跑脱的怎是“临时工”
- ubuntu安装gcc教程
- android--sequoyah插件--本机开发Invalid path for NDK解决办法
- 我的Oracle Dataguard 和 RMAN duplicate 配置总结
- javascript变量和函数的加载顺序
- POJ Supermarket
- cuda学习笔记之异步并行执行
- 借助SAP HANA实现文本分析和文本挖掘
- gethibernatetemplate的find方法大全
- linux bind: Address already in use(Z)
- Spring中的WebAppRootListener
- php中如何获取文本文件并删除最后一个字符。
- Hibernate三种状态;query查询;ResultTransformer转换为pojo对象;可以将query语句写在xml中;Criteria查询;ProjectionList总和/f分组等函数
- 正则表达式