http://poj.org/problem?id=1456

题意:给你 N 件不同的商品,每件商品最多可以买一次。每件物品对应两个值 pi di

pi 表示物品的价值,di 表示可以买的最迟时间(也就是第一天到第 di 天都可以买这件物品)

规定:每天最多可以买一件物品,问你可以得到的最大价值。

思路【贪心版本】:将物品按照价值从大到小排序

​ 依次枚举每件物品

​ 从可以买的最后一天枚举,看是否可以买

注意:标记天数。

思路KB的并查集版本】:将物品按照价值从大到小排序

​ 处理的时候选择最后的一个不冲突点。

​ 用并查集实现链表的作用,快速找到不冲突点。

贪心版本

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1e4 + 10;
int n;
bool book[maxn];
struct Node {
int p, d;
}node[maxn];
bool cmp(Node a, Node b) {
return a.p > b.p;//按价值排序
}
int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
while (cin >> n) {
memset(book, false, sizeof book);
for (int i = 1; i <= n; ++i)cin >> node[i].p >> node[i].d;
int ans = 0; sort(node + 1, node + 1 + n,cmp);
for (int i = 1; i <= n; ++i) {
for (int j = node[i].d; j >= 1; j--) {
if (!book[j]) {
ans += node[i].p;
book[j] = 1; break;
}
}
}
cout << ans << endl;
}
}

并查集版本

/*
POJ 1456
贪心处理。
按照获利p从大到小排序。
处理的时候选择最后的一个不冲突点。
用并查集实现链表的作用,快速找到不冲突点
*/
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int maxn = 1e4 + 10;
int f[maxn];
struct Node {
int p, d;
}node[maxn];
int cmp(Node a, Node b) {
return a.p > b.p;
}
int find(int x) {
if (f[x] == -1)return x;
return f[x] = find(f[x]);
} int main() {
//freopen("in.txt", "r", stdin);
ios::sync_with_stdio(false), cin.tie(0);
int n; while (cin >> n) {
memset(f, -1, sizeof f);
for (int i = 0; i < n; ++i)
cin >> node[i].p >> node[i].d;
sort(node , node + n,cmp);
int ans = 0;
for (int i = 0; i < n; ++i) {
int t = find(node[i].d);
if (t > 0) {
ans += node[i].p;
f[t] = t - 1;
}
}
cout << ans << endl;
}
}

POJ 1456 Supermarket【贪心 + 并查集】的更多相关文章

  1. POJ 1456 Supermarket(贪心+并查集优化)

    一开始思路弄错了,刚开始想的时候误把所有截止时间为2的不一定一定要在2的时候买,而是可以在1的时候买. 举个例子: 50 2  10 1   20 2   10 1    50+20 50 2  40 ...

  2. poj1456 Supermarket 贪心+并查集

    题目链接:http://poj.org/problem?id=1456 题意:有n个物品(0 <= n <= 10000) ,每个物品有一个价格pi和一个保质期di (1 <= pi ...

  3. POJ 1456 - Supermarket - [贪心+小顶堆]

    题目链接:http://poj.org/problem?id=1456 Time Limit: 2000MS Memory Limit: 65536K Description A supermarke ...

  4. nyoj 208 + poj 1456 Supermarket (贪心)

    Supermarket 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 A supermarket has a set Prod of products on sal ...

  5. POJ 1456 Supermarket(贪心+并查集)

    题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...

  6. POJ_1456 Supermarket 【并查集/贪心】

    一.题面 POJ1456 二.分析 1.贪心策略:先保证从利润最大的开始判断,然后开一个标记时间是否能访问的数组,时间尽量从最大的时间开始选择,这样能够保证后面时间小的还能够卖. 2.并查集:并查集直 ...

  7. POJ 1456 Supermarket 区间问题并查集||贪心

    F - Supermarket Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Sub ...

  8. POJ 1456——Supermarket——————【贪心+并查集优化】

    Supermarket Time Limit:2000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit  ...

  9. poj 1456 Supermarket - 并查集 - 贪心

    题目传送门 传送点I 传送点II 题目大意 有$n$个商品可以销售.每个商品销售会获得一个利润,但也有一个时间限制.每个商品需要1天的时间销售,一天也只能销售一件商品.问最大获利. 考虑将出售每个物品 ...

  10. POJ 1456 (贪心+并查集) Supermarket

    有n件商品,每件商品有它的利润和售出的最后期限,问能够得到的最大利润是多少 这道题和 HDU 1789 Doing Homework again 几乎一模一样,只不过这个是求最的扣分,本题是求最大利润 ...

随机推荐

  1. mac中删除本地maven库中下载失败的.lastUpdated文件

    在 macOS 中,要删除本地 Maven 仓库中所有的 .lastUpdated 文件,您可以使用 find 命令结合 rm 命令来执行这个操作.这可以在终端(Terminal)中完成. 打开您的终 ...

  2. Why Microservices ?

    微服务(Microservices)是一种软件架构设计风格,其中应用程序由一组小型.独立.自治的服务组成,这些服务共同工作以构建整体应用.每个服务都专注于一个特定的业务功能,可以独立部署.扩展和维护. ...

  3. [GDOIpj221C] 流水线

    第三题 流水线 提交文件: line.cpp 输入文件: line.in 输出文件: line.out 时间空间限制: 2 秒, 256 MB 在计算机组成原理这门课中,小明的老师布置了实现 CPU ...

  4. Chrome扩展的核心:manifest 文件(下)

    大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 在上篇和中篇中已经完成了对 manifest 文件中以下字段的解释: "manifest_ ...

  5. hello Flask最简单的Flask项目

    # 1.导包 from flask import Flask # 2.实例化Flask对象.一般变量名都叫app,大家都是这样用,很多扩展插件的文档也是叫app,所以统一都叫app. # __name ...

  6. bash shell笔记整理——外部命令和内部命令区别

    linux命令的类别: 外部命令 内部命令 什么是内部命令 bash shell程序内部自带的命令. 什么是外部命令 不是bash shell内建命令,bash会根据用户给定的命令从PATH环境变量中 ...

  7. X2加密的PcbDoc类型导出内容有误,不加密的PcbDoc导出的表格正常

    出现该类问题说明读取PcbDoc文件文件出了文件,加密类型添加tmp类型即可

  8. ElasticSearch之Task management API

    命令样例如下: curl -X GET "https://localhost:9200/_tasks?pretty" --cacert $ES_HOME/config/certs/ ...

  9. 基于注解玩转excel导出导入-基于注解玩转excel导出导入

    title: 基于注解玩转excel导出导入 date: 2021-05-01 15:55:13.53 updated: 2021-12-26 17:43:19.505 url: https://ww ...

  10. Python设置进程名称

    技术背景 当我们在同一个机器上管理多个进程时,经常会遇到一个问题是,很多进程的名称可能是重复的.以Linux系统为例,进程名称默认使用的是argv[0].这样一来,如果在一台机器上有很多个Python ...