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 ...
 
随机推荐
- Storm Zookeeper
			
本文记录了storm 1.1.0 在zookeeper中保存的信息. 下面的图是在[4]的基础上进行修改的. /-storm -- storm在zookeeper上的根目录 | |-/assignme ...
 - AngularJs轻松入门(三)MVC架构
			
MVC应用程序架构最早于1970年起源于Smalltalk语言,后来在桌面应用程序开发中使用较为广泛,如今在WEB开发中也非常流行.MVC的核心思想是將数据的管理(Model).业务逻辑控制(Cont ...
 - http://www.open-open.com/lib/tag/ReactiveCocoa
			
http://www.open-open.com/lib/tag/ReactiveCocoa
 - Playing With Stones UVALive - 5059 Nim SG函数 打表找规律
			
Code: #include<cstdio> #include<algorithm> using namespace std; typedef long long ll; ll ...
 - 《转载》编程入门指南 v1.4
			
编程入门指南 v1.4 Badger · 8 个月前 作者:@萧井陌, @Badger 自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0 CoCode ...
 - Bash 基础特性
			
命令别名 alias 显示当前shell中定义的所有别名 alias 别名='原始命令' unalias 别名 取消定义的别名在命令前加\使用命令本身,而不是别名(或者使用绝对路径执行命令使用命 ...
 - QQ音乐
			
import re import requestsimport json class Search: def __init__(self, song): ''' self.vkey_url ---&g ...
 - unity 自动删除未引用的Assets下的资源
			
随着时间的堆积,项目中Assets文件夹下的资源会变得越来越繁杂,有些贴图.材质啥的可能压根没有使用过,但是又不敢轻易去删除. 这里分享两个插件,用于管理这些资源. 一.ResourceChecker ...
 - EChart报表插件使用笔记(1)
			
报表插件Echart java类 package com.spring.controller; import java.io.IOException; import java.util.Arrays; ...
 - C++ 鼠标模拟程序
			
关于鼠标模拟程序应用不算少见.在游戏外挂或者一些操作频繁位置确定的程序上应用往往有奇效. 比較旧的API是mouse_event,本人一開始也用这个在搞,只是后来才看到新的API在操作上更加统一.稍作 ...