poj1456(贪心+并查集)
题目链接: http://poj.org/problem?id=1456
题意: 有n个商品, 已知每个商品的价格和销售截止日期, 每销售一件商品需要花费一天, 即一天只能销售一件商品, 问最多能买多少钱;
思路: 贪心..需要买最多的钱, 而且每件商品销售花费的时间都一样多, 那么我们尽量把值钱的商品买完就好啦...对数据按价格排序, 把贵的先买, 并且尽量推迟其销售日期, 因为它不能超过截止日期销售嘛, 尽量推迟其销售日期就能减少其与截止日期小于它并且比较有价值的商品冲突啦...
代码:
1 #include <iostream> 2 #include <stdio.h> 3 #include <algorithm> 4 #include <math.h> 5 #include <string.h> 6 #define MAXN 10010 7 using namespace std; 8 9 int main(void){ 10 int n, vis[MAXN]; 11 pair<int, int> p[MAXN]; 12 while(scanf("%d", &n)!=EOF){ 13 int x, y, gg=0; 14 memset(vis, 0, sizeof(vis)); 15 for(int i=0; i<n; i++){ 16 scanf("%d%d", &p[i].first, &p[i].second); 17 } 18 sort(p, p+n); 19 int ans=0; 20 for(int i=n-1; i>=0; i--){ 21 for(int j=p[i].second; j>0; j--){ 22 if(!vis[j]){ //***第j天没有被占用 23 vis[j]=1; 24 ans+=p[i].first; 25 break; 26 } 27 } 28 } 29 printf("%d\n", ans); 30 } 31 return 0; 32 }
上面的时间复杂度 为n*k, 如果数据比价坑的话可能超时(这题的数据还是比较水的啦)...我们可以优化一下..怎么优化呢...可以用并查集啦;
1 #include <iostream> 2 #include <stdio.h> 3 #include <algorithm> 4 #include <math.h> 5 #include <string.h> 6 #define MAXN 10010 7 using namespace std; 8 9 int pre[MAXN]; 10 11 int find(int x){ 12 return x==pre[x]?x:pre[x]=find(pre[x]); 13 } 14 15 int main(void){ 16 int n; 17 pair<int, int> p[MAXN]; 18 while(scanf("%d", &n)!=EOF){ 19 int x, y, gg=0; 20 for(int i=0; i<=MAXN; i++){ 21 pre[i]=i; 22 } 23 for(int i=0; i<n; i++){ 24 scanf("%d%d", &p[i].first, &p[i].second); 25 } 26 sort(p, p+n); 27 int ans=0; 28 for(int i=n-1; i>=0; i--){ 29 int gg=find(p[i].second); //***gg为商品i截止日期前最大的没有被占用的日期,即商品i最晚可以的出售日期 30 if(gg>0){ 31 ans+=p[i].first; 32 pre[gg]=gg-1; //***gg被商品i占用了, 将gg指向前一个位置 33 } 34 } 35 printf("%d\n", ans); 36 } 37 return 0; 38 }
转载于:https://www.cnblogs.com/geloutingyu/p/6121408.html
poj1456(贪心+并查集)相关推荐
- F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)
https://ac.nowcoder.com/acm/contest/9984/F 参考:F 魏迟燕的自走棋(贪心+并查集) 将每个人看成一个点,武器的能力值抽象成边,这样就转化成图论的模型了. 然 ...
- Supermarket | 贪心 + 并查集
Supermarket | 贪心 + 并查集 from poj 1456 from acwing 145 时间限制 :2s 内存限制:65M Description: A supermarket ha ...
- poj1256(贪心+并查集)
题目链接:http://poj.org/problem?id=1456 题意:给n件商品的价格和卖出截至时间,每一个单位时间最多只能卖出一件商品,求能获得的最大利润. 思路:首先是贪心,为获得最大利润 ...
- HDU多校2 - 6763 Total Eclipse(贪心+并查集)
题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在每个点都有一个点权,对于每次操作,可以选择一个点以及其周围能够连接的所有点,令其点权减一,当某个点的点权减到 0 时,就相 ...
- poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
poj 1456 这第一眼还觉得只要贪心就可以了,但是emmm看了大佬的题解居然真的要用到并查集= = 大佬清晰的思路 大佬舒服的代码 #pragma warning(disable:4996) #i ...
- Kruskal算法:贪心+并查集=最小生成树
http://www.51nod.com/ Kruskal算法的高效实现需要一种称作并查集的结构.我们在这里不介绍并查集,只介绍Kruskal算法的基本思想和证明,实现留在以后讨论. Kruskal算 ...
- 最高的奖励 51Nod - 1163(贪心+并查集)
有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励.在结束时间之前完成该任务,就可以获得对应的奖励.完成每一个任务所需的时间都是1个单位时间.有时候完成所有任务是不可能的,因为时间上可能会有冲突 ...
- Codeforces 437D 贪心+并查集
这个题目让我想起了上次在湘潭赛的那道跪死了的题.也是最值问题,这个也是,有n个动物园 每个都有权值 然后被m条路径相连接,保证图是连通的,然后求所有的p[i][j]之和.i,j为任意两个zoo,pij ...
- 数据结构作业——ギリギリ eye(贪心+优先队列/贪心+并查集)
ギリギリ eye Description A.D.1999,由坠落地球的"谜之战舰"带来的 Over Technology,揭示了人类历史和远古文明之间的丝丝联系, 促使人类终止彼 ...
- bzoj 1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居(切比雪夫距离+multiset贪心+并查集)
1604: [Usaco2008 Open]Cow Neighborhoods 奶牛的邻居 Time Limit: 5 Sec Memory Limit: 64 MB Submit: 1092 S ...
最新文章
- java 实现接口后重写方法报错
- ubuntu 16.04 更新后搜狗输入法无法输入中文的问题
- Python OpenCV学习笔记之:分水岭算法分割图像
- 使用 cglib_CGLib 动态代理 原理解析
- 【转摘】Office三剑客之间的格式互换
- LeetCode_图类
- dede 验证码不显示 vdimgck.php,Dede后台验证码不显示解决方法详解(dedecms 5.7)
- 笔记本AutoCAD启动时闪退怎么办_戴尔笔记本电脑开不了机如何解决【解决方法】...
- 从零打造 Vue 聊天组件
- 三级python考试难吗_Python自学之路:三级菜单
- Entity Framework 实体框架的形成之旅--利用Unity对象依赖注入优化实体框架(2)
- 设计糟糕的 RESTful API 就是在浪费时间!
- @程序员,你还在加班写 Bug 吗?
- ARM计划将四核心CPU引入磁盘驱动器
- oceanbase ODC和Obclient连接mysql类型的ob库
- flex builder的安装
- 数组遍历,forEach(),ever(),some()
- 机器视觉——远心镜头(1)
- adlds文件服务器,Windows轻型目录(AD LDS)的备份恢复
- python中valueerror是什么意思_python-ValueError:不安全的字符串pi
热门文章
- js基础知识汇总12
- python实现仿射变换
- C++中的->用于赋值
- pytorch RuntimeError: expected scalar type Double but found Float
- 机器学习---分类、回归、聚类、降维的区别
- android rs232串口协议,RS232串口协议详解-在路上.PDF
- solidity import @是什么意思
- 怎么计算算法复杂度 big O
- C++ for (auto it:myset) 是什么意思 引用
- 零知识证明在匿名投票中的应用