POJ 1456 Supermarket【贪心 + 并查集】
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【贪心 + 并查集】的更多相关文章
- POJ 1456 Supermarket(贪心+并查集优化)
一开始思路弄错了,刚开始想的时候误把所有截止时间为2的不一定一定要在2的时候买,而是可以在1的时候买. 举个例子: 50 2 10 1 20 2 10 1 50+20 50 2 40 ...
- poj1456 Supermarket 贪心+并查集
题目链接:http://poj.org/problem?id=1456 题意:有n个物品(0 <= n <= 10000) ,每个物品有一个价格pi和一个保质期di (1 <= pi ...
- POJ 1456 - Supermarket - [贪心+小顶堆]
题目链接:http://poj.org/problem?id=1456 Time Limit: 2000MS Memory Limit: 65536K Description A supermarke ...
- nyoj 208 + poj 1456 Supermarket (贪心)
Supermarket 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 A supermarket has a set Prod of products on sal ...
- POJ 1456 Supermarket(贪心+并查集)
题目链接:http://poj.org/problem?id=1456 题目大意:有n件商品,每件商品都有它的价值和截止售卖日期(超过这个日期就不能再卖了).卖一件商品消耗一个单位时间,售卖顺序是可以 ...
- POJ_1456 Supermarket 【并查集/贪心】
一.题面 POJ1456 二.分析 1.贪心策略:先保证从利润最大的开始判断,然后开一个标记时间是否能访问的数组,时间尽量从最大的时间开始选择,这样能够保证后面时间小的还能够卖. 2.并查集:并查集直 ...
- POJ 1456 Supermarket 区间问题并查集||贪心
F - Supermarket Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Sub ...
- POJ 1456——Supermarket——————【贪心+并查集优化】
Supermarket Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit ...
- poj 1456 Supermarket - 并查集 - 贪心
题目传送门 传送点I 传送点II 题目大意 有$n$个商品可以销售.每个商品销售会获得一个利润,但也有一个时间限制.每个商品需要1天的时间销售,一天也只能销售一件商品.问最大获利. 考虑将出售每个物品 ...
- POJ 1456 (贪心+并查集) Supermarket
有n件商品,每件商品有它的利润和售出的最后期限,问能够得到的最大利润是多少 这道题和 HDU 1789 Doing Homework again 几乎一模一样,只不过这个是求最的扣分,本题是求最大利润 ...
随机推荐
- mac中删除本地maven库中下载失败的.lastUpdated文件
在 macOS 中,要删除本地 Maven 仓库中所有的 .lastUpdated 文件,您可以使用 find 命令结合 rm 命令来执行这个操作.这可以在终端(Terminal)中完成. 打开您的终 ...
- Why Microservices ?
微服务(Microservices)是一种软件架构设计风格,其中应用程序由一组小型.独立.自治的服务组成,这些服务共同工作以构建整体应用.每个服务都专注于一个特定的业务功能,可以独立部署.扩展和维护. ...
- [GDOIpj221C] 流水线
第三题 流水线 提交文件: line.cpp 输入文件: line.in 输出文件: line.out 时间空间限制: 2 秒, 256 MB 在计算机组成原理这门课中,小明的老师布置了实现 CPU ...
- Chrome扩展的核心:manifest 文件(下)
大家好,我是 dom 哥.这是我关于 Chrome 扩展开发的系列文章,感兴趣的可以 点个小星星. 在上篇和中篇中已经完成了对 manifest 文件中以下字段的解释: "manifest_ ...
- hello Flask最简单的Flask项目
# 1.导包 from flask import Flask # 2.实例化Flask对象.一般变量名都叫app,大家都是这样用,很多扩展插件的文档也是叫app,所以统一都叫app. # __name ...
- bash shell笔记整理——外部命令和内部命令区别
linux命令的类别: 外部命令 内部命令 什么是内部命令 bash shell程序内部自带的命令. 什么是外部命令 不是bash shell内建命令,bash会根据用户给定的命令从PATH环境变量中 ...
- X2加密的PcbDoc类型导出内容有误,不加密的PcbDoc导出的表格正常
出现该类问题说明读取PcbDoc文件文件出了文件,加密类型添加tmp类型即可
- ElasticSearch之Task management API
命令样例如下: curl -X GET "https://localhost:9200/_tasks?pretty" --cacert $ES_HOME/config/certs/ ...
- 基于注解玩转excel导出导入-基于注解玩转excel导出导入
title: 基于注解玩转excel导出导入 date: 2021-05-01 15:55:13.53 updated: 2021-12-26 17:43:19.505 url: https://ww ...
- Python设置进程名称
技术背景 当我们在同一个机器上管理多个进程时,经常会遇到一个问题是,很多进程的名称可能是重复的.以Linux系统为例,进程名称默认使用的是argv[0].这样一来,如果在一台机器上有很多个Python ...