POJ 3038 贪心(multiset)
题意:
思路:
1. 贪心 我们考虑肯定是走最近的最合适
想象自己是一个黑一日游的司机:
1.如果有乘客要上车,那么就让他上,收钱!
2.如果超载了,把距目的地最远的几个乘客踢下去,退钱。
3.行驶到下一站
(摘自http://blog.sina.com.cn/s/blog_9d987af5010158ih.html)
多么生动形象….
用multiset乱搞就可以了(我代码写得很丑 慎看)
2 乱想的.. 我觉得可以用最大费用流+消圈来搞 (然而并不会 (也不能证明正确性) 也很可能会T )
//By SiriusRen
#include <set>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
struct Node{int from,to,num;}node[50005];
int k,n,c,size,ans,tot=1;
struct cmp2{
bool operator ()(Node a,Node b){
return a.to<b.to;
}
};
multiset<Node,cmp2>s;
multiset<Node,cmp2>::iterator it;
bool cmp(Node a,Node b){return a.from<b.from;}
int main(){
scanf("%d%d%d",&k,&n,&c);
for(int i=1;i<=k;i++){
scanf("%d%d%d",&node[i].from,&node[i].to,&node[i].num);
}
sort(node+1,node+1+k,cmp);
for(int i=1;i<=n;i++){
while(node[tot].from==i){
if(tot>k)break;
if(node[tot].to<node[tot].from){tot++;continue;}
s.insert(node[tot]);
size+=node[tot].num;
tot++;
}
it=s.begin();
while((*it).to==i&&!s.empty()){
ans+=(*it).num;
size-=(*it).num;
s.erase(it);
it=s.begin();
}
while(size>c){
it=s.end();it--;Node jy=*it;
int temp=(*it).num;s.erase(it);
if(size-temp>c)size-=temp;
else{
jy.num=temp-(size-c);
s.insert(jy);
size=c;
}
}
}
size=0,tot=k;s.clear();
for(int i=n;i;i--){
while(node[tot].from==i){
if(tot<1)break;
if(node[tot].to>node[tot].from){tot--;continue;}
s.insert(node[tot]);
size+=node[tot].num;
tot--;
}
it=s.end();
if(!s.empty())it--;
else goto ed;
while((*it).to==i){
ans+=(*it).num;
size-=(*it).num;
s.erase(it);
it=s.end();
if(!s.empty())it--;
else break;
}
ed:while(size>c){
it=s.begin();Node jy=*it;
int temp=(*it).num;s.erase(it);
if(size-temp>c){
size-=temp;
}
else{
jy.num=temp-(size-c);
s.insert(jy);
size=c;
}
}
}
printf("%d\n",ans);
}
POJ 3038 贪心(multiset)的更多相关文章
- poj 3038
http://poj.org/problem?id=3038 这个题我是在一个关于并查集的博客中找到的,结果我就觉得这个应该是个贪心,真想不出这个与并查集有什么鬼关系,看discuss里面也都是贪心, ...
- HDU4268 Alice and Bob(贪心+multiset)
Problem Description Alice and Bob's game never ends. Today, they introduce a new game. In this game, ...
- cf1061D 贪心+multiset 好题!
cf上的思维题真好! 本题是在模拟的基础上贪心即可:将n段时间按照左端点(右端点为第二关键字)从小到大排序,然后遍历每一个时间段. 对于每一个时间段[li,ri],先找到multiset中最靠近li但 ...
- POJ - 1017 贪心训练
Packets Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 59725 Accepted: 20273 Descrip ...
- hdu 4268 Alice and Bob(贪心+multiset)
题意:卡牌覆盖,每张卡牌有高(height)和宽(width).求alice的卡牌最多可以覆盖多少bob的卡牌 思路:贪心方法就是找h可以覆盖的条件下找w最大的去覆盖. #include<ios ...
- HDU 4268 Alice and Bob(贪心+Multiset的应用)
题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...
- POJ 2376 贪心
题意:FJ希望它的牛做一些清洁工作.有N只牛和T个时间段,每只牛可以承担一段时间内的工作.FJ希望让最小数量的牛覆盖整个T,求出其数量.若无法覆盖整个T,则输出-1. 分析:首先要注意T表示T个时间段 ...
- poj 1328 贪心
/* 贪心.... 处理处每个点按照最大距离在x轴上的映射 然后我们就有了一些线段 目的是选取尽量少的点 使得每个线段内都有点出现 我们按照左端点排序 然后逐一处理 假设第一个雷达安在第一个线段的右端 ...
- Yogurt factory(POJ 2393 贪心 or DP)
Yogurt factory Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8205 Accepted: 4197 De ...
随机推荐
- RecordAccumulator 1
介绍 前面讲过producer会将数据保存在RecordAccumulator中,并通过Sender发送数据.RecordAccumulator 就相当于一个队列保存着那些准备发送到server的数据 ...
- Android框架-Volley(二)
1. ImageRequest的用法 前面我们已经学习过了StringRequest和JsonRequest的用法,并且总结出了它们的用法都是非常类似的,基本就是进行以下三步操作即可: 1. 创建一个 ...
- ListView 适配器实现getviewtypcount() 数组越界IndexOutOfBoundException
ListView中Item的多布局显示,需要用到了getViewTypecount和getItemViewType这两个重写方法,但是做完后出现了如下提示错误:java.lang.ArrayIndex ...
- 《剑指offer》栈的压入、弹出序列
一.题目描述 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压 ...
- day01-Python介绍,安装,idea
一. python 简介 Python,读作['paɪθɑn],翻译成汉语是蟒蛇的意思,Python 的 logo 也是两条缠绕在一起的蟒蛇的样子,然而 Python 语言和蟒蛇实际上并没有一毛钱关系 ...
- Java ——代理模式[转发]
1. 简介 代理模式(Proxy Pattern)是GoF 23种Java常用设计模式之一.代理模式的定义:Provide a surrogate or placeholder for anothe ...
- php八大设计模式之桥接模式
一个抽象产生多种具体的实现方式,单纯的通过子类继承会有子类爆炸(过多的子类产生)的现象,系统需要它们之间进行动态耦合. 面向过程: <?php header("content-type ...
- 【习题 8-17 UVA - 11536】Smallest Sub-Array
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 尺取法. 考虑一个1..i的窗口. 里面在到达了i位置的时候恰好有1..k这些数字了. 为了更接近答案. 显然可以试着让左端点变成2 ...
- 【v2.x OGE教程 17】事务处理
游戏代码中常常有些逻辑须要处理.因此OGE引擎加入了一个IUpdateHandler的类. IUpdateHandler类是OGE引擎中使用频率很之高的组件之中的一个,其本身是一个接口.内部有onUp ...
- 不要小看了get 与set
不知道大家曾经是怎么使用实体中的get与set的.我先前是这样使用的. 先定义一个实体类.之后写与之相关的字段名称.最后匹配上与之相关的属性,控制字段的读写权限. 曾经使用方式 代码1 public ...