POJ 1456 Supermarket
2015-11-03 23:49
260 查看
贪心,按时间排个序,再一个个地添加
有空位就直接放进去,没空位就覆盖价值更小的
也可以按价值排序,再一个个地添加
从截止时间往前找空位
用并查集优化,用set也可以
根结点是没有用过的点,子结点是用过了的点
有空位就直接放进去,没空位就覆盖价值更小的
#include <cstdio> #include <set> #include <algorithm> using namespace std; struct P{int v, d;}p[10005]; bool operator < (P a, P b) {return a.d < b.d;} multiset<int> S; multiset<int>::iterator it; int main() { int n; while(~scanf("%d", &n)) { S.clear(); for(int i = 1; i <= n; i++) scanf("%d%d", &p[i].v, &p[i].d); sort(p + 1, p + n + 1); for(int i = 1; i <= n; i++) { if(S.size() < p[i].d) S.insert(p[i].v); else { if(*S.begin() >= p[i].v) continue; S.erase(S.begin()); S.insert(p[i].v); } } int sum = 0; for(it = S.begin(); it != S.end(); it++) sum += *it; printf("%d\n", sum); } return 0; }
也可以按价值排序,再一个个地添加
从截止时间往前找空位
用并查集优化,用set也可以
根结点是没有用过的点,子结点是用过了的点
#include <cstdio> #include <algorithm> using namespace std; struct P{int v, d;}p[10005]; bool operator < (P a, P b) {return a.v > b.v;} int fa[10005]; int find(int n) { if(fa == 0) return 0; if(fa != n) fa = find(fa ); return fa ; } int main() { int n; while(~scanf("%d", &n)) { int Max = 0; for(int i = 1; i <= n; i++) { scanf("%d%d", &p[i].v, &p[i].d); if(Max < p[i].d) Max = p[i].d; } for(int i = 0; i <= Max; i++) fa[i] = i; sort(p + 1, p + n + 1); int sum = 0; for(int i = 1; i <= n; i++) { int k = find(p[i].d); if(k == 0) continue; fa[k] = fa[k - 1]; sum += p[i].v; } printf("%d\n", sum); } return 0; }
相关文章推荐
- NAT的转化
- NAT的转化
- poj3368 Frequent values
- cocos2d-x 3.x addEventListenerWithSceneGraphPriority第二个参数的作用
- powerdesigner逆向导出oracle数据库结构显示备注
- p7zip的解压和压缩
- tomcat原理及安装及反向代理、会话保持、session集群和session共享服务器的实现(一)
- NAT的转化
- linux 常用基础命令 echo 详细介绍
- IOS UIButton
- 功能框架的补充
- SFTP环境搭建及客户代码调用公共方法封装
- Android 开发中,有哪些坑需要注意
- HDU 5527 Too Rich 贪心
- bzoj1636&bzoj1699【Usaco2007 Jan】Balanced Lineup
- Android-常用第三方库proguard-rules配置
- C++搜索引擎—Xapian中文简介
- 谈谈iOS中的屏幕方向
- 学习计划
- 图的邻接表的遍历(DFS(递归,非递归),BFS,拓扑排序)