NYOJ 208 Supermarket (贪心 && 并查集)
来源:互联网 发布:登封市java培训机构 编辑:程序博客网 时间:2024/05/21 18:42
Supermarket
- 描述
- A supermarket has a set Prod of products on sale. It earns a profit px for each product x∈Prod sold by a deadline dx that is measured as an integral number of time units starting from the moment the sale begins. Each product takes precisely one unit of time for being sold. A selling schedule is an ordered subset of products Sell ≤ Prod such that the selling of each product x∈Sell, according to the ordering of Sell, completes before the deadline dx or just when dx expires. The profit of the selling schedule is Profit(Sell)=Σx∈Sellpx. An optimal selling schedule is a schedule with a maximum profit.
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.
- 输入
- A set of products starts with an integer 0 <= n <= 10000, which is the number of products in the set, and continues with n pairs pi di of integers, 1 <= pi <= 10000 and 1 <= di <= 10000, that designate the profit and the selling deadline of the i-th product. White spaces can occur freely in input. Input data terminate with an end of file and are guaranteed correct.
- 输出
- For each set of products, the program prints on the standard output the profit of an optimal selling schedule for the set. Each result is printed from the beginning of a separate line.
- 样例输入
4 50 2 10 1 20 2 30 17 20 1 2 1 10 3 100 2 8 2 5 20 50 10
- 样例输出
80185
这个题归到数据结构应该是使用并查集做,但是可以使用贪心直接做出来。
本来是以为去每个日期的最大值,其实不是,正确的贪心策略是先从最值钱的货物开始售卖,如果当前的货物所在deadline已经
出售了东西,那就在1~deadline之间查找哪天能卖出去。
#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 10000 + 10;struct P{ int x, y; //x是价值, y是天数}p[maxn];int n;bool vis[maxn];bool cmp(P a, P b){ return a.x > b.x;}int main(){ while (scanf("%d", &n) != EOF){ memset(vis, 0, sizeof(vis)); for (int i = 0; i < n; i++) scanf("%d%d", &p[i].x, &p[i].y); sort(p, p + n, cmp); int sum = 0; for (int i = 0; i < n; i++){ for (int j = p[i].y; j > 0; j--){ if (!vis[j]){ sum += p[i].x; vis[j] = 1; break; } } } printf("%d\n", sum); } return 0;}
使用并查集#include <cstdio>#include <algorithm>#include <cstring>using namespace std;const int maxn = 10000 + 10;struct P{ int x, y; //x是价值, y是天数}p[maxn];int n;int father[maxn];bool cmp(P a, P b){ return a.x > b.x;}int find(int x){ if (x != father[x]) father[x] = find(father[x]); return father[x];}int main(){ while (scanf("%d", &n) != EOF){ for (int i = 0; i < maxn; i++) father[i] = i; for (int i = 0; i < n; i++) scanf("%d%d", &p[i].x, &p[i].y); sort(p, p + n, cmp); int sum = 0; for (int i = 0; i < n; i++){ int ans = find(father[p[i].y]); if (ans > 0){ sum += p[i].x; father[ans] = ans - 1; } } printf("%d\n", sum); } return 0;}
- NYOJ 208 Supermarket (贪心 && 并查集)
- Supermarket -- 贪心 + 并查集
- POJ 1456 Supermarket(贪心 + 并查集 )
- POJ-1456 Supermarket(贪心,并查集优化)
- POJ 1456 supermarket(贪心加并查集)
- poj 1456 Supermarket (贪心, 并查集)
- POJ 1456 Supermarket【贪心 + 并查集】
- poj 1456 - Supermarket(贪心+并查集)
- Supermarket 并查集或贪心
- poj 1456 Supermarket (贪心+并查集)
- POJ 1456 Supermarket【贪心+并查集】
- POJ 1456 Supermarket [贪心+并查集]
- Supermarket poj 1456 (贪心,并查集)
- POJ-1456 Supermarket【贪心+并查集】
- nyoj 208 Supermarket(贪心)
- 【经典贪心】poj 1456 Supermarket (贪心, 并查集)
- poj 1456 Supermarket(贪心+并查集,贪心+优先队列)
- Supermarket 并查集
- iOS系列教程之 用instruments来检验你的app
- Android缓存方案-网络请求缓存
- HTML的基础学习(第1篇)
- [iOS 转]系统声音服务与震动
- LeetCode 22. Generate Parentheses
- NYOJ 208 Supermarket (贪心 && 并查集)
- 【Objective-C基础】KVC使用
- 一个例子让你了解Java反射机制
- 编写C语言版本的卷积神经网络CNN之三:CNN的误差反向传播过程
- idea的svn突然显示错误“E155021: E155021:”解决方法
- 30分钟git命令入门到放弃
- android 中几种adapter的总结
- 获取网络链接状态
- MFC,OPENCV 静态编译