51Nod - 1475 优先队列 + 贪心
题意:
小C现在想建设一个国家。这个国家中有一个首都,然后有若干个中间站,还有若干个城市。
现在小C想把国家建造成这样的形状:选若干(可以是0个)的中间站把他们连成一条直线,然后把首都(首都也是一个中间站)连在这一条直线的左端。然后每个点可以连一个城市,特别的是最右端的点可以连接两个城市。
现在有n个城市的规划供小C选择。但是,他们那儿的交通条件比较差,他们那儿一天是2*H个小时,每个城市里面的人每天都会去首都拿一样东西,从他们所在的城市出发,到了首都之后拿了东西就走(拿东西的时间可以忽略不计),他们要在2*H个小时之内返回他们自己的家中(从家中出发到返回家中不超过2*H小时)。
每个城市有两个属性,一个是城市的直径,另外一个是能居住的人口数目。对于第i个城市而言,这两个属性分别是hi,pi。
城市的直径的意思是离这个城市出口最远的人想要出城先要在城里行走的最少的时间。
在首都,中间站,城市之间行走要花费1小时的时间。
小C想选择一些城市然后通过若干的中间站和首都连接起来,在每个人能在2*H小时返回的条件下所有城市居住的总人口数目要最多。
样例解释:最上面的蓝点表示首都,其它的蓝点表示中间站,剩下的红圈表示选择的城市。
单组测试数据。 第一行包含两个整数n 和H (1 ≤ n ≤ 1000,1 ≤ H ≤ 1000000000),表示可供选择的城市数目和时间限制。 接下来n行,每行有两个整数hi, pi (1 ≤ hi ≤ H, 1 ≤ pi ≤ 1000),第i个城市的两个属性,即直径和能容纳人口数。
输出最多能居住的人口数目。
5 10 1 1 1 1 2 2 3 3 4 4
11
思路:
代码:
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1005;struct node {int t, v;bool operator < (const node &b) const {if (t == b.t) return v > b.v;return t < b.t;}
}a[MAXN];int main() {//freopen("in.txt", "r", stdin);int n, h, Max = 1;scanf("%d%d", &n, &h);for (int i = 1; i <= n; i++) {scanf("%d%d", &a[i].t, &a[i].v);a[i].t = h - a[i].t;Max = max(Max, a[i].t);}sort (a + 1, a + 1 + n);priority_queue <int, vector <int>, greater<int> > que;int ans = 0, now = 1, res = 0;for (int i = 1; i <= n; i++) {if (a[i].t == 0) continue;if (a[i].t == now - 1) {ans = max(ans, res + a[i].v); // 这里假设最后连接两个城市的情况,直接更新ansif (!que.empty() && a[i].v > que.top()) {res += a[i].v - que.top(); // 这里用当前城市来替代之前已经安排的城市,使最优值更优que.pop(); que.push(a[i].v);}}else {++now;que.push(a[i].v); // 时限符合条件,直接把当前城市安排到最后res += a[i].v;}ans = max(ans, res);}printf("%d\n", ans);return 0;
}
51Nod - 1475 优先队列 + 贪心相关推荐
- LeetCode 1642. 可以到达的最远建筑(二分查找 / 优先队列贪心)
文章目录 1. 题目 2. 解题 2.1 二分查找 2.2 优先队列+贪心 1. 题目 给你一个整数数组 heights ,表示建筑物的高度.另有一些砖块 bricks 和梯子 ladders . 你 ...
- 【CF 732E】Sockets(优先队列+贪心)
[CF 732E]Sockets(优先队列+贪心) 题目大意: n台电脑,m个供电器. 每台电脑和每个供电器都有电量,当电脑i的电量和供电器j电量相同时,可以连接供电. 现在提供变压器,可以连接到供电 ...
- 51nod 1475:建设国家 优先队列的好题
1475 建设国家 基准时间限制:1 秒 空间限制:131072 KB 分值: 20 难度:3级算法题 收藏 关注 小C现在想建设一个国家.这个国家中有一个首都,然后有若干个中间站,还有若干个城市 ...
- POJ3614Sunscreen(优先队列+贪心)
Sunscreen Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8435 Accepted: 2981 Descrip ...
- *【HDU - 5711】Ingress(tsp旅行商问题,优先队列贪心,状压dp,floyd最短路,图论)
题干: Brickgao, who profited from your accurate calculating last year, made a great deal of money by m ...
- LeetCode 1199. 建造街区的最短时间(优先队列贪心)
文章目录 1. 题目 2. 解题 1. 题目 你是个城市规划工作者,手里负责管辖一系列的街区.在这个街区列表中 blocks[i] = t 意味着第 i 个街区需要 t 个单位的时间来建造. 由于一个 ...
- hdu 4544 优先队列+贪心
题意:最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏. 游戏规则很简单,用箭杀死免子即可. 箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为 ...
- poj 3614 Sunscreen(优先队列+贪心)
Description To avoid unsightly burns while tanning, each of the C (1 ≤ C ≤ 2500) cows must cover her ...
- BZOJ 2288: 【POJ Challenge】生日礼物 优先队列+贪心+链表
这题看别人题解的 这题说可以转换成数据备份. 这题可以把一段同号的数并成一个数,那么就变成了一个正负交替的序列,然后把头尾的负数去掉. 然后就是把所有的正值都加起来,并统计正数的段数cnt,如cnt& ...
最新文章
- 编译httpd-2.4.46的RPM包
- 《深入理解Spark:核心思想与源码分析》——1.2节Spark初体验
- 支持向量机(SVM)必备知识(KKT、slater、对偶)
- 超好用的简单的jquery tab选项卡切换代码(点击切换和导航栏滑过)
- 常用 TCP 端口作用及其操作建议
- java核心标签库,16.JSTL标签库(我的JavaEE笔记)
- 业务专题篇:用户使用路径分析
- VC++的windows服务
- maya脚本用python还是mel_替换/替换材质的Maya Python/MEL脚本
- win10下装win7双系统_电脑安装双系统win7+win10,安装顺序不同,使用会有什么不同?...
- Python 调用JSON接口实例
- 第七届山东理工大学ACM趣味编程循环赛 Round#1 sdut4109 玄黄的字符串
- PDF文件怎么转换成Word?这几种方法原来这么简单
- 关于侵权Sinesafe官方网站,仿冒、抄袭等恶劣行为的公告
- 微信内转发APP及h5类域名怎么做到防封防拦截,微信域名防红技术原理
- 大大方方补肾,平平常常做人 - 肾虚的症状和治疗
- 蒙泰RIP快捷键大全
- ROWNUM和ROWID的认识
- 【FPGA的基础快速入门15------DS18B20数字温度传感器】
- 主要的数据仓库开发软件及软件功能比较
热门文章
- java this调用构造方法_java this关键字调用构造方法
- css3获取最后一个元素,一个CSSselect器来获取最后一个可见的div
- Android列表用法之二:实战ListView高级用法
- iOS:UILabel省略号 NSLineBreakMode
- 重装win7后ubuntu系统没有了,如何找回ubuntu系统
- nginx的启动与停止
- Spring Bean配置细节author: 惠惠
- An Analysis of Scale Invariance in Object Detection – SNIP [CVPR2018]
- [转] invariance(不变性)解释与图例
- SQL Server数据库删除和修改