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 题解 好水好水的贪心... 容易发现每种特技只表演两次,多表演没有意义,而且差距越长收益越大 然后就可以贪,最大的放两端,次大的往里,然后是第三大....... 证明很简单 ...
随机推荐
- jquery-简单拖拽代码
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 【MySQL】 empty table and delete table.
1.MySQL生成删除满足条件的表的sql: 1 SELECT 2 CONCAT( 3 'DROP TABLE ', 4 GROUP_CONCAT(table_name), 5 ';' 6 ) AS ...
- nginx配置文件或目录404和403
对于Nginx web目录下的文件,如果不想用户访问那么可以配置返回404或者403状态,默认情况下对于目录来说,如果目录下没有默认文档,那么默认返回是403,也就是不允许查看目录列表,但是如果知道静 ...
- vux 表单提交数据 返回后页面跳转
ps:仅作参考
- 【原创】js实现一个可随意拖拽排序的菜单导航栏
1.想做这个效果的原因主要是用在UC上看新闻发现他们的导航菜单很有趣.无聊的时候在哪划着玩了很久.所以就干脆自己写一个.原效果如下 2.整体效果如下,在已推荐和未添加里面每个小方块可以触摸移动位置互换 ...
- 全选、取消、2级 checkbox的选中切换
需求:点击父级checkbox的时候,子级出现全选或全取消:点击子级时,如:子级都是在未选中时,点击某一个子级,则父级选中:如:子级中只有一个选中状态(其他子级都是未选中),点击该子级,则父级也改为未 ...
- OSG透明代码
//关闭灯光 state->setMode(GL_LIGHTING,osg::StateAttribute::OFF|osg::StateAttribute::PROTECTED); //打开混 ...
- LNMP平台搭建---MySQL安装篇
在前两篇中,安装了一个基本的Web服务器,但是只能提供静态网页查看,要做成动态网站,就必须要数据库或其他编程语言支持了,这里先介绍MySQL数据库的安装. MySQL是一个开源的数据库,在互联网行业应 ...
- 【xcode5的使用】
layout: post title: "WWDC 2013 Session笔记 - Xcode5和ObjC新特性" date: 2013-06-13 10:05 comments ...
- c语言中(*p)[n]和*p[n]的区别
写于2016年12月5日. c语言中(*p)[n]表示的数组指针,在该表达式中按照运算的优先级,首先计算()的中*p,在和[n]计算.含义为指向含有n个元素的一维数组. *p[n]表示的是指针数组,在 ...