poj 1456 Supermarket (贪心, 并查集)
链接:
http://poj.org/problem?id=1456
题目:
Description
For example, consider the products Prod={a,b,c,d} with (pa,da)=(50,2), (pb,db)=(10,1), (pc,dc)=(20,2), and (pd,dd)=(30,1). The possible selling schedules are listed in table 1. For instance, the schedule Sell={d,a} shows that the selling of product d starts at time 0 and ends at time 1, while the selling of product a starts at time 1 and ends at time 2. Each of these products is sold by its deadline. Sell is the optimal schedule and its profit is 80.
Write a program that reads sets of products from an input text file and computes the profit of an optimal selling schedule for each set of products.
Input
Output
Sample Input
4 50 2 10 1 20 2 30 17 20 1 2 1 10 3 100 2 8 25 20 50 10
Sample Output
80 185
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;const int N = 10005;
struct Node{int px, dx;friend bool operator<(const Node&a,const Node&b){return a.dx>b.dx;}
}arr[N];priority_queue<int,vector<int>,less<int> >q;int n;int main(){while(~scanf("%d",&n)){int maxTime=0;for(int i=0; i<n; ++i){scanf("%d%d",&arr[i].px, &arr[i].dx);if(arr[i].dx>maxTime) maxTime = arr[i].dx;}sort(arr,arr+n);int ans = 0, pos=0;;while(!q.empty()) q.pop();for(int t=maxTime; t>=1; --t){while(pos<n&&arr[pos].dx>=t){q.push(arr[pos++].px);} if(!q.empty()){ans += q.top();q.pop();}}printf("%d\n", ans);}return 0;
}
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;const int N = 10005;
struct Node{int px, dx;friend bool operator<(const Node&a,const Node&b){return a.px>b.px;}
}arr[N];int n;int main(){while(~scanf("%d",&n)){int maxTime=0;for(int i=0; i<n; ++i){scanf("%d%d",&arr[i].px, &arr[i].dx);if(arr[i].dx>maxTime) maxTime = arr[i].dx;}sort(arr,arr+n);bool vis[N];memset(vis, 0, sizeof(vis));int ans = 0, pos=0;for(int i=0; i<n; ++i){if(!vis[arr[i].dx]){ans += arr[i].px;vis[arr[i].dx] = true;}else{for(int j=arr[i].dx-1; j>=1; --j)if(!vis[j]){ans += arr[i].px;vis[j] = true;break;}}}printf("%d\n", ans);}return 0;
}
3. 并查集优化
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;const int N = 10005;
struct Node{int px, dx;friend bool operator<(const Node&a,const Node&b){return a.px>b.px;}
}arr[N];int f[N],rank[N],n;
inline void init(int n){for(int i=0; i<=n; ++i)f[i]=i, rank[i]=0;
}
int find(int x){int i, j=x;while(j!=f[j]) j=f[j];while(x!=j){i=f[x]; f[x]=j; x=i;}return j;
}int main(){while(~scanf("%d",&n)){int maxTime=0;for(int i=0; i<n; ++i){scanf("%d%d",&arr[i].px, &arr[i].dx);if(arr[i].dx>maxTime) maxTime = arr[i].dx;}init(maxTime);sort(arr,arr+n);bool vis[N];int ans = 0, pos=0;for(int i=0; i<n; ++i){int d = find(arr[i].dx);if(d>0){ans += arr[i].px;f[d] = d-1;}}printf("%d\n", ans);}return 0;
}
—— 生命的意义,在于赋予它意义。
poj 1456 Supermarket (贪心, 并查集)相关推荐
- poj 1456 Supermarket 贪心+并查集(个人感觉有点难判断出来
poj 1456 这第一眼还觉得只要贪心就可以了,但是emmm看了大佬的题解居然真的要用到并查集= = 大佬清晰的思路 大佬舒服的代码 #pragma warning(disable:4996) #i ...
- Supermarket | 贪心 + 并查集
Supermarket | 贪心 + 并查集 from poj 1456 from acwing 145 时间限制 :2s 内存限制:65M Description: A supermarket ha ...
- F 魏迟燕的自走棋(思维+贪心+并查集维护联通块/左部点配对边<=2的匈牙利)
https://ac.nowcoder.com/acm/contest/9984/F 参考:F 魏迟燕的自走棋(贪心+并查集) 将每个人看成一个点,武器的能力值抽象成边,这样就转化成图论的模型了. 然 ...
- 【贪心】 POJ 1456 Supermarket 详解 (并查集/二叉堆优化)
题目链接:POJ-1456 题目大意 有n件商品,每件商品的利润为,销售日期的截止时间为(即只能在时间前销售该物品).一天只能销售一件物品.问这n件商品的最大利润为多少 方案一 分析 有两种贪心策略, ...
- (POJ - 1456)Supermarket(并查集)
题目链接:1456 -- Supermarket 原题意比较难理解,下面我给出一个简化版的理解方式:超市里有n个商品.第i个商品必须在保质期(第di天及之前)卖掉,若卖掉可让超市获得pi的利润,但是每 ...
- poj1256(贪心+并查集)
题目链接:http://poj.org/problem?id=1456 题意:给n件商品的价格和卖出截至时间,每一个单位时间最多只能卖出一件商品,求能获得的最大利润. 思路:首先是贪心,为获得最大利润 ...
- POJ 2236 Wireless Network 并查集
Wireless Network 并查集 Crawling in process... Crawling failed Time Limit:10000MS Memory Limit:6553 ...
- POJ 1182 食物链,并查集的拓展
http://poj.org/problem?id=1182 /******************************************************** 此道题目 前天看的时候 ...
- HDU多校2 - 6763 Total Eclipse(贪心+并查集)
题目链接:点击查看 题目大意:给出一张 n 个点和 m 条边组成的无向图,现在每个点都有一个点权,对于每次操作,可以选择一个点以及其周围能够连接的所有点,令其点权减一,当某个点的点权减到 0 时,就相 ...
最新文章
- GML-SVG-VML比较
- 北斗导航 | Matlab实现电离层延迟计算:Klobuchar(源代码)
- Qt学习笔记之常用控件QlistWidget
- pipenv 虚拟环境新玩法
- 《c语言从入门到精通》看书笔记——第16章 网络套接字编程(下)——套接字
- P3804-[模板]后缀自动机【SAM】
- 什么是runtime?
- Linux系统查看内存的几个小命令
- Android应用如何反馈Crash报告
- 金笛邮件-邮件连接数据库专题之oracle数据库
- Zabbix邮件报警设置
- java 表格添加监听_关于Oracle用java实时监听oracle对表的DML操作【技术贴】
- C#基础笔记(第十天)
- 30 System类
- 详解CAN总线:常用CAN连接器的使用方法
- 通用双向循环链表学习
- 机器之心线上活动:虚拟现实(VR)与增强现实(AR)
- 海思hi3716c机顶盒接usb摄像头和usb无线耳机时,无线耳机有时没有声音
- 前端传图片file给后端,后端接收为空,0kb
- java lambda表达式 steam api