bzoj1745: [Usaco2005 oct]Flying Right 飞行航班(贪心+map)
之前做过一道基本一样的题目,抽象出来就是有个容量为c的载体,一些线段上某个点到另一个点要运输w个东西,求从头到尾最多能运多少东西。
这种模型可以用贪心做,用map,map[r]表示r的那个点,我们准备运多少头牛到那里,但是还没运到。
用map的好处是不管是插入还是删除,它都按坐标从小到大排。
那么先把所有的边按左端点从小到大排,对于当前边,
容量未满的时候,直接加入map
容量满的时候,若map中最大的坐标比这条边的右端点要大,那么显然用当前边替换会更好。
运到的怎么处理呢?
当我们枚举到这个点,这个点的map值大于零说明有牛运到这里了,则ans+=map[now],cap-=map[now],并从map中删除这个点。
还有这道题从1到n还要从n到1回来,可以做两遍,也可以把回去的那段倒着拼在后面
map的用法还不是很熟练,写了一个多小时才写完,不过一次AC也是非常爽的= =
#include<stdio.h> #include<string.h> #include<algorithm> #include<map> #define INF 1000000000 using namespace std; ; struct node{ int l,r,w; }e[maxn*]; map<int,int> mp; int n,m,c,cap,head,ans; bool cmp(node a, node b){ if (a.l==b.l) return a.r<b.r; else return a.l<b.l; } int main(){ scanf("%d%d%d", &m, &n, &c); ; i<=m; i++){ scanf("%d%d%d", &e[i].l, &e[i].r, &e[i].w); *n-e[i].l,e[i].r=*n-e[i].r; } sort(e+,e++m,cmp); mp.clear(); mp[-INF]=; cap=; map<int,int>::iterator it; head=; ans=; ; now<=*n-; now++){ ){ ans+=mp[now]; cap-=mp[now]; it=mp.find(now); mp.erase(it); } while (e[head].l<now) head++; while (e[head].l==now){ int to=e[head].r,num=e[head].w; ) cap++,num--,mp[to]++; if (cap==c && num) for (it=--mp.end(); it!=mp.begin();){ if ((it->first)>to){ if ((it->second)>num){ (it->second)-=num; mp[to]+=num; break; }else{ mp[to]+=(it->second); num-=(it->second); mp.erase(it--); } }else break; } head++; } } printf("%d\n", ans); ; }
bzoj1745: [Usaco2005 oct]Flying Right 飞行航班(贪心+map)的更多相关文章
- bzoj1745[Usaco2005 oct]Flying Right 飞行航班*
bzoj1745[Usaco2005 oct]Flying Right 飞行航班 题意: n个农场,有k群牛要从一个农场到另一个农场(每群由一只或几只奶牛组成)飞机白天从农场1到农场n,晚上从农场n到 ...
- [Usaco2005 oct]Flying Right 飞行航班
Description 为了表示不能输给人类,农场的奶牛们决定成立一家航空公司.她们计划每天早晨,从密歇根湖湖岸的最北端飞向最南端,晚上从最南端飞往最北端.在旅途中,航空公司可以安排飞机停在某些机场. ...
- BZOJ 1684: [Usaco2005 Oct]Close Encounter
题目 1684: [Usaco2005 Oct]Close Encounter Time Limit: 5 Sec Memory Limit: 64 MB Description Lacking e ...
- 1684: [Usaco2005 Oct]Close Encounter
1684: [Usaco2005 Oct]Close Encounter Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 387 Solved: 181[ ...
- BZOJ 1685 [Usaco2005 Oct]Allowance 津贴:贪心【给硬币问题】
题目链接:http://begin.lydsy.com/JudgeOnline/problem.php?id=1333 题意: 有n种不同币值的硬币,并保证大币值一定是小币值的倍数. 每种硬币的币值为 ...
- 【BZOJ】1685: [Usaco2005 Oct]Allowance 津贴(贪心)
http://www.lydsy.com/JudgeOnline/problem.php?id=1685 由于每个小的都能整除大的,那么我们在取完大的以后(不超过c)后,再取一个最小的数来补充,可以证 ...
- bzoj:1685 [Usaco2005 Oct]Allowance 津贴
Description As a reward for record milk production, Farmer John has decided to start paying Bessie t ...
- (贪心 map) Flying to the Mars hdu1800
Flying to the Mars Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- BZOJ2697 特技飞行 【贪心】
题目链接 BZOJ2697 题解 好水好水的贪心... 容易发现每种特技只表演两次,多表演没有意义,而且差距越长收益越大 然后就可以贪,最大的放两端,次大的往里,然后是第三大....... 证明很简单 ...
随机推荐
- CF#138 div 1 A. Bracket Sequence
[#138 div 1 A. Bracket Sequence] [原题] A. Bracket Sequence time limit per test 2 seconds memory limit ...
- WSDL2java简单使用
一.使用工具WSDL2java把接口转为本地可调用的.java文件 工具的目录结构: 设置WSDL2Java(URL).bat中的参数 set Axis_Lib=.\lib set Java_Cmd= ...
- ReactiveCocoa源码拆分解析(二)
(整个关于ReactiveCocoa的代码工程可以在https://github.com/qianhongqiang/QHQReactive下载) 上面抽丝剥茧的把最主要的信号机制给分离开了.但在RA ...
- WDCP突破phpmyadmin导入文件时只有20M
WDCP在默认的配置下,PHPMYADMIN的上传上限是20M,很多时候我们的数据库大小已经大于了20M了,那这时候改怎么办呢?下面就用简单的话,告诉大家如何解决这一个问题.方法: 登录到WDCP的后 ...
- [k]优雅的css
1.图片文字列表 (2016-01-25) 1.1 实现效果图如下: 1.2 代码: html:( 代码十分优雅哦! ) <ul> <li class="step1&quo ...
- .NET 泛型
泛型 泛型将类型参数的概念引入 .NET Framework,类型参数使得设计如下类和方法成为可能:这些类和方法将一个或多个类型的指定推迟到客户端代码声明并实例化该类或方法的时候.例如,通过 ...
- 给包含compid列且值为null ,表的行数据赋值--
IF OBJECT_ID ('dbo.spSelectColValue_In_DB') IS NOT NULL DROP PROCEDURE dbo.spSelectColValue_In_DB go ...
- artdialog
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- C语言笔记一
学习C语言已经有一段时间,然而发现越学不知道的东西越多,这是在印象笔记中记得一些东西,现在再回顾一遍顺便补充一些新东西. 一,基础知识 运算符号 优先级 单目>算术>关系 从高到低 ...
- oracle数据库创建后要做的事情
在SQL Plus工具中(oracle自带)用conn /as sysdba登录数据库. 一:先新建用户 create user test01 identified by test02(test01为 ...