题目描述

【故事背景】
刚从俄罗斯旅游回来的JYY买了很多很多好看的套娃作为纪念品!比如右
图就是一套他最喜欢的套娃J。JYY由于太过激动,把所有的套娃全
部都打开了。而由于很多套娃长得过于相像,JYY现在不知道该如何把它们装
回去了(他实在搞不清,应该把哪个套娃装到哪个里面去了)。
JYY一共有N个拆开的套娃,每个套娃从1到N编号。编号为i的套娃有一个外径Outi和一个内径Ini(Ini<Outi)。
对于套娃i和套娃j,如果满足Outi<INj,那么套娃i就可以装到套娃j里面去。
注意,一个套娃内部,不允许并排的放入多个套娃。
也就是说,如果我们将i装到j的内部之后,还存在另一个套娃k,也满足Outk<Inj,我们此时是不允许再将k放
到j内部的(因为j的内部已经放入了i)。但是,如果k还满足Outk<Ini,那么我们允许先将k放到i的内部,
然后再把k和i作为一个整体放入j的内部。
JYY认为一套好的套娃,内部的空隙一定是尽量少的。如果套娃j内部装入了套娃i,那么我们认为,套娃j内部
产生的空隙为Inj-Outi;如果套娃j的内部什么也没有装,那么套娃j的空隙则就是Inj。
JYY也希望,那些长得更加好看的套娃,里面可以填的尽量满一些;而相对
那些不那么好看的套娃,JYY也就相对不那么介意一些。为此JYY对于编号为
i的套娃设置了一个好看度Bi,如果这个套娃内部还存在K的空隙,那么JYY对
于这个套娃就会产生K*Bi的不满意度。
JYY对于一个套娃安装方案的不满意度,就是每个套娃产生的不满意度的总
和。JYY希望找出一个,不满意度最小的套娃安装方案。

输入

第一行包含一个正整数N。接下来N行,每行包含三个正整数Outi,Ini,Bi,表示i号套娃的外径,内径,以及好看度。N<=2∗10^5,1<=Ini<Outi<=10^4,1<=Bi<=10^9

输出

输出文件包含一行一个整数,表示不满意度的最小值

样例输入

3
5 4 1
4 2 2
3 2 1

样例输出

7
 
我们先将所有的$k_{i}$加入答案,即$ans=\sum\limits_{i=1}^{n}in_{i}*b_{i}$。
现在考虑将$i,j$两个套娃合并,即将$i$放入$j$中的贡献:答案会减少$out_{i}*b_{j}$。
显然对于每个套娃,我们一定会将外径小于它的内径中最大的与他合并。
那么我们贪心地将$b_{i}$从大到小排序,枚举套娃,每次选择当前套娃能装下的最大的进行合并。
可以证明对于$b_{i}>b_{j},out_{k}>out_{l}$且保证$k,l$均能与$i,j$合并时,$b_{i}*out_{k}+b_{j}*out_{l}>b_{i}*out_{l}+b_{j}*out_{k}$。
用$multiset$保存当前剩下的套娃即可。

#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define ll long long
using namespace std;
struct miku
{
int in,out,b;
}a[200010];
multiset<int>s;
multiset<int>::iterator it;
int n;
ll ans;
bool cmp(miku a,miku b)
{
return a.b>b.b;
}
int main()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d%d%d",&a[i].out,&a[i].in,&a[i].b);
ans+=1ll*a[i].in*a[i].b;
s.insert(a[i].out);
}
sort(a+1,a+1+n,cmp);
for(int i=1;i<=n;i++)
{
it=s.lower_bound(a[i].in);
if(it!=s.begin())
{
it--;
ans-=1ll*a[i].b*(*it);
s.erase(it);
}
}
printf("%lld",ans);
}

BZOJ4482[Jsoi2015]套娃——贪心+set的更多相关文章

  1. 「JSOI2015」套娃

    「JSOI2015」套娃 传送门 考虑贪心. 首先我们假设所有的套娃都互相不套. 然后我们考虑合并两个套娃 \(i\),\(j\) 假设我们把 \(i\) 套到 \(j\) 里面去,那么就可以减少 \ ...

  2. 长安大学第四届ACM-ICPC“迎新杯”程序设计竞赛-重现赛 G - 彩虹岛套娃

    题目描述 俄罗斯套娃是俄罗斯特产的木制玩具,一般由多个一样图案的空心木娃娃一个套一个组成,最多可达十多个,通常为圆柱形,底部平坦可以直立.颜色有红色,蓝色,绿色,紫色等.最普通的图案是一个穿着俄罗斯民 ...

  3. 7.20套娃(tao)

    套娃(tao) input7 39 53 710 65 102 610 104 110 53 53 9output012 sol: 把查询想象成(x1,y1)向(x2,y2)有边当且仅当(x1< ...

  4. [GXYCTF2019]禁止套娃

    0x00 知识点 无参数RCE eval($_GET['exp']); 参考链接: https://skysec.top/2019/03/29/PHP-Parametric-Function-RCE/ ...

  5. 刷题[GXYCTF2019]禁止套娃

    梳理思路 打开网站,发现很简单,只有flag在哪里的字样. 查看源码,常用后台目录,robots.txt,都未发现有任何东西. 扫描 直接拉进扫描器一扫,发现 思考可能是git源码泄露,可能可以恢复源 ...

  6. [GXYCTF2019]禁止套娃 1 &无参数RCE

    [GXYCTF2019]禁止套娃 1 啥都没有那只能上扫描器来一探究竟了. 扫完没有啥结果,但网上找了一下说是git泄露,但是我这里显示了403. <?php include "fla ...

  7. 0xctf[No parameters readfile](魔改版[GXYCTF2019]禁止套娃)

    阅读本文前建议先阅读本站中的另一篇文章:[GXYCTF2019]禁止套娃 重要参考链接:http://www.heetian.com/info/827 Leon师傅魔改了[GXYCTF2019]禁止套 ...

  8. 简单粗暴套娃模式组json发送https请求

    各位童鞋大家好,向来简单粗暴的铁柱兄给大家来玩一手套娃模式来组Json数据,不说别的,无脑套. 当然,这一手比较适合临场用一下,若长期用的话建议搞一套适用的框架,只管set就好了.话不多说开始上课. ...

  9. [BJDCTF 2nd]old-hack && [GXYCTF2019]禁止套娃

    [BJDCTF 2nd]old-hack 页面很有意思 同时也告诉了我们是THINKPHP5,我们只需要寻找THINKPHP5的漏洞就可以了. https://www.codercto.com/a/5 ...

随机推荐

  1. Omi教程-组件通讯攻略大全

    组件通讯 Omi框架组建间的通讯非常遍历灵活,因为有许多可选方案进行通讯: 通过在组件上声明 data-* 传递给子节点 通过在组件上声明 data 传递给子节点 (支持复杂数据类型的映射) 父容器设 ...

  2. POJ - 1177 线段树

    POJ - 1177 扫描线 这道题也算是一道扫描线的经典题目了. 只不过这道题是算周长,非常有意思的一道题.我们已经知道了,一般求面积并,是如何求的,现在我们要把扫描线进行改造一下,使得能算周长. ...

  3. 1060D Social Circles(贪心)

    题意:有n个客人,第i个客人希望左边至少Li个空椅子,右边至少Ri个空椅子,每个客人都属于一个圈,问你最少需要准备的椅子数量 贪心做,每个人都可以去和另一个人牵手,组成一个新的人,那么我们让大的和大的 ...

  4. C. Ayoub and Lost Array

    链接 [https://codeforces.com/contest/1105/problem/C] 题意 给你n,表示数组长度,元素的值是l到r,问有多少种方案使得所有元素和整除3 分析 思维dp, ...

  5. 堆排、python实现堆排

    一.堆-完全二叉树 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),是不稳定排序 堆排序中的堆有大顶堆.小顶堆两种.他们都是完 ...

  6. JSP 快速入门

    目录 生命周期 9大对象 常用指令 基本语法 表达式语言(EL) jstl介绍 常用的jstl标签 生命周期 我们虽然写的是jsp,代码中包含了html.css.js,以及Java代码,但是真正执行的 ...

  7. Python3练习题 001:4个数字求不重复的3位数

    #Python练习题 001:4个数字求不重复的3位数#方法一import itertoolsres = [][res.append(i[0]*100 + i[1]*10 + i[2]) for i ...

  8. Es6数值拓展

    Es6数值拓展 一,Number扩展 1,ES6 提供了二进制和八进制数值的新的写法,分别用前缀0b(或0B)和0o(或0O)表示. 将0b和0o前缀的字符串数值转为十进制,要使用Number方法 N ...

  9. mysql异常:Packet for query is too large (10240 > 1024). You can change this value

    出现这个问题的原因是:mysql的配置文件中 max_allowed_packet 设置过小,mysql根据配置文件会限制server接受的数据包大小. 还有人会说我操作的数据量明显没有超过这个值为啥 ...

  10. [转帖]HTTP 头部解释

    HTTP 头部解释 https://www.cnblogs.com/poissonnotes/p/4844014.html 之前看的太粗了 同事闻起来 referer 才知道自己所知甚少.. ==== ...