题意:





思路:

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)的更多相关文章

  1. poj 3038

    http://poj.org/problem?id=3038 这个题我是在一个关于并查集的博客中找到的,结果我就觉得这个应该是个贪心,真想不出这个与并查集有什么鬼关系,看discuss里面也都是贪心, ...

  2. HDU4268 Alice and Bob(贪心+multiset)

    Problem Description Alice and Bob's game never ends. Today, they introduce a new game. In this game, ...

  3. cf1061D 贪心+multiset 好题!

    cf上的思维题真好! 本题是在模拟的基础上贪心即可:将n段时间按照左端点(右端点为第二关键字)从小到大排序,然后遍历每一个时间段. 对于每一个时间段[li,ri],先找到multiset中最靠近li但 ...

  4. POJ - 1017 贪心训练

    Packets Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 59725   Accepted: 20273 Descrip ...

  5. hdu 4268 Alice and Bob(贪心+multiset)

    题意:卡牌覆盖,每张卡牌有高(height)和宽(width).求alice的卡牌最多可以覆盖多少bob的卡牌 思路:贪心方法就是找h可以覆盖的条件下找w最大的去覆盖. #include<ios ...

  6. HDU 4268 Alice and Bob(贪心+Multiset的应用)

     题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形.矩形不可旋转.问你Alice最多能覆盖Bo ...

  7. POJ 2376 贪心

    题意:FJ希望它的牛做一些清洁工作.有N只牛和T个时间段,每只牛可以承担一段时间内的工作.FJ希望让最小数量的牛覆盖整个T,求出其数量.若无法覆盖整个T,则输出-1. 分析:首先要注意T表示T个时间段 ...

  8. poj 1328 贪心

    /* 贪心.... 处理处每个点按照最大距离在x轴上的映射 然后我们就有了一些线段 目的是选取尽量少的点 使得每个线段内都有点出现 我们按照左端点排序 然后逐一处理 假设第一个雷达安在第一个线段的右端 ...

  9. Yogurt factory(POJ 2393 贪心 or DP)

    Yogurt factory Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8205   Accepted: 4197 De ...

随机推荐

  1. 使用与不适用@RequestBody注解的区别

    1. 如果使用@RequestBody接受页面参数: public Map<String,Object> insertBudget(@ApiParam(required = true,na ...

  2. PL/SQL Developer 关闭Sql窗口快捷键

    preferences->keyconfigration->file/close然后设置你喜欢的按键就行了.(ps:这个close是关闭当前活动的那一个页面)

  3. sql sever 创建临时表的两种方法

    创建临时表       方法一:     create table #临时表名( 字段1 约束条件,             字段2 约束条件,                  .....)     ...

  4. JDOJ 2939: Suffix Automaton 广义后缀自动机_统计子串

    建立广义后缀自动机,对每个节点都建立各自的 $Parent$ 数组. 这样方便统计,不会出现统计错误. 考虑新加入一个字符. 1 这条转移边已经存在,显然对答案没有贡献. 2 这条转移边不存在,贡献即 ...

  5. 洛谷 P2014 选课 && caioj 1108 树形动态规划(TreeDP)3:选课

    这里的先后关系可以看成节点和父亲的关系 在树里面,没有父亲肯定就没有节点 所以我们可以先修的看作父亲,后修的看作节点 所以这是一颗树 这题和上一道题比较相似 都是求树上最大点权和问题 但这道题是多叉树 ...

  6. caioj 1077 动态规划入门(非常规DP1:筷子)

    首先可以看出排序之后,最优解肯定是每一对都相邻才是最优的 那么我们就要找构成最优解的相邻组 设f[i][j]是前i个字符,k对的最小值 如果当前这个筷子不取的话,f[i][j] = f[i-1][j] ...

  7. 05001_Linux简介

    1.Linux的概述 (1)Linux是基于Unix的开源免费的操作系统,由于系统的稳定性和安全性几乎成为程序代码运行的最佳系统环境.Linux是由Linus Torvalds(林纳斯•托瓦兹)起初开 ...

  8. 【习题 8-18 UVA - 1619】Feel Good

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用单调队列求出l[i]和r[i] 分别表示i的左边最近的大于a[i]的数的位置以及i右边最近的大于a[i]的数的位置. 则l[i]+ ...

  9. 【Educational Codeforces Round 37 E】Connected Components?

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] bfs. 用一个链表来记录哪些点已经确定在某一个联通快里了. 一开始每个点都能用. 然后从第一个点开始进行bfs. 然后对于它的所有 ...

  10. Java基础学习总结(27)——7 款开源 Java 反编译工具

    今天我们要来分享一些关于Java的反编译工具,反编译听起来是一个非常高上大的技术词汇,通俗的说,反编译是一个对目标可执行程序进行逆向分析,从而得到原始代码的过程.尤其是像.NET.Java这样的运行在 ...