Description

有n个房间和n盏灯,你需要在每个房间里放入一盏灯。每盏灯都有一定功率,每间房间都需要不少于一定功率的灯泡才可以完全照亮。 
你可以去附近的商店换新灯泡,商店里所有正整数功率的灯泡都有售。但由于背包空间有限,你至多只能换k个灯泡。 
你需要找到一个合理的方案使得每个房间都被完全照亮,并在这个前提下使得总功率尽可能小。

Input

第一行两个整数n,k(1<=k<=n<=500000)。 
第二行n个整数pi,表示你现有的灯泡的功率。 
第三行n个整数wi,表示照亮每间房间所需要的最小功率。

Output

如果无法照亮每间房间,仅输出NIE。 
否则输出最小的总功率。

Sample Input

6 2 12 1 7 5 2 10 1 4 11 4 7 5

Sample Output

33

看到数据范围,想到可能是贪心。

我们先按照灯的功率从小到大排序,然后从小到大依次让灯去选择房间。很显然每个灯都要选择自己能够照明的需要功率最大的房间。然后剩下的没有选择的房间只能通过购买灯泡来完成。判断无解也非常容易,如果剩下的房间大于k个就无解。

但是如果剩下房间小于k个,我么显然可以将之前配对好的灯泡替换了来降低答案值。所以我们开个大根堆,维护配对了的的最大值就可以了。

代码:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<ctime>
#define ll long long
#define N 500005using namespace std;
inline int Get() {int x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9') {if(ch=='-') f=-1;ch=getchar();}while('0'<=ch&&ch<='9') {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return x*f;}int n,k;
ll p[N],w[N];
priority_queue<ll>cha;
multiset<ll>s;
multiset<ll>::iterator it;
ll ans;
int main() {n=Get(),k=Get();for(int i=1;i<=n;i++) p[i]=Get();for(int i=1;i<=n;i++) {w[i]=Get();s.insert(w[i]);}sort(p+1,p+1+n);for(int i=1;i<=n;i++) {it=s.upper_bound(p[i]);if(it==s.begin()) continue ;it--;ans+=p[i];cha.push(p[i]-*it);s.erase(it);if(!s.size()) break;}if(s.size()>k) {cout<<"NIE";return 0;}for(it=s.begin();it!=s.end();it++) {ans+=*it;}k-=s.size();for(int i=1;i<=k;i++) {ans-=cha.top();cha.pop();if(!cha.size()) break;}cout<<ans;return 0;
}

转载于:https://www.cnblogs.com/hchhch233/p/9735811.html

BSOJ 2423 -- 【PA2014】Final Zarowki相关推荐

  1. 【BZOJ-3721】Final Bazarek 贪心

    3721: PA2014 Final Bazarek Time Limit: 20 Sec  Memory Limit: 128 MB Submit: 610  Solved: 243 [Submit ...

  2. java final域_【Java】final 域的内存语义

    文章来源:<Java并发编程的艺术> final 域的重排序规则 对于 final 域,编译器和处理器要遵守两个重排序规则. 1)在构造函数内对一个 final 域的写入,与随后把这个被构 ...

  3. bzoj3714【PA2014】Kuglarz

    3714: [PA2014]Kuglarz Time Limit: 20 Sec   Memory Limit: 128 MB Submit: 361   Solved: 219 [ Submit][ ...

  4. BSOJ 3899 -- 【CQOI2014】 数三角形

    Description 给定一个n*m的网格,请计算三个点都在格点上的三角形共有多少个.下图为4*4的网格上的一个三角形.  注意三角形的三点不能共线. Input 输入一行,包含两个空格分隔的正整数 ...

  5. 【PA2014】【BZOJ3709】Bohater(贪心,排序)

    problem 有n只怪 打败第i只怪物,消耗d[i]点生命值,恢复a[i]点生命值. 任何时候你的生命值都不能降到0(或0以下) 请问是否存在一种打怪顺序,使得你可以打完这n只怪物而不死掉 n &l ...

  6. 【FCPX】Final Cut ProX 入门必备快捷键/插件下载链接/常用字体转场特效

    快捷键 素材框操作 效果 点击后回车 修改素材库.事件名称 选中事件,拖入视频 导入素材 i+o 选择一个片段 f 收藏 故事线操作 效果 command+T 添加默认转场 shift+c 预览窗口 ...

  7. 【PA2014】【BZOJ3714】Kuglarz

    Description 魔术师的桌子上有n个杯子排成一行,编号为1,2,-,n,其中某些杯子底下藏有一个小球,如果你准确地猜出是哪些杯子,你就可以获得奖品.花费c_ij元,魔术师就会告诉你杯子i,i+ ...

  8. 【PA2014】【BZOJ3717】Pakowanie

    Description 你有n个物品和m个包.物品有重量,且不可被分割:包也有各自的容量.要把所有物品装入包中,至少需要几个包? Input 第一行两个整数n,m(1<=n<=24,1&l ...

  9. 【PA2014】【BZOJ3709】Bohater

    Description 在一款电脑游戏中,你需要打败n只怪物(从1到n编号).为了打败第i只怪物,你需要消耗d[i]点生命值,但怪物死后会掉落血药,使你恢复a[i]点生命值.任何时候你的生命值都不能降 ...

最新文章

  1. AI“生死”落地:谁有资格入选AI Top 30+案例?
  2. Silverlight实用窍门系列:40.Silverlight中捕捉视频,截图保存到本地
  3. char s[0] do{}while(0)
  4. 第十六周程序阅读(6)
  5. CSS-解决苹果点击高亮、安卓select灰色背景(select下拉框在IOS中背景变黑、出现阴影问题)
  6. Service Mesh 在中国工商银行的探索与实践
  7. 模拟时钟中断的产生及设计一个对时钟中断事件进行处理的模拟程序_操作系统基础6-支持操作系统的最基本的硬件-中断...
  8. 技嘉注入usb 3.0工具_技嘉怎么安装win10系统 技嘉安装win10系统步骤【图文介绍】...
  9. 正则化、归一化含义解析(一)
  10. Linux修改文件/文件夹权限
  11. python中特殊变量-python list每三个分成一组python中星号变量的几种特殊用法
  12. 移动互联网之路-李晓斌
  13. pytorch学习笔记(三十七):Adam
  14. web安全day7:IIS之FTP服务器
  15. 从食品质检员到代码工程师,大哥你就这样跳槽进了阿里巴巴?
  16. RTMP 两种方式推流:推H.264、ACC和推FLV封装格式
  17. spring boot面试问题集锦
  18. python三维图像切片成二维_python之画三维图像
  19. 在cmd命令中写oracle语句
  20. 云南怒江---地狱与天堂的边缘

热门文章

  1. j@2ff4f00f_J4F的完整形式是什么?
  2. 加载一张照片,可选择是否另存为
  3. 汇编语言-013(DAS 、DAA与DAS、QWORD类型用SBB借位减法、编写指令将AX符号扩展到EAX,不能使用CWD、用SHR和条件判断指令将AL循环右移一位、SHLD、压缩十进制转换)
  4. HDU 5950——Recursive sequence
  5. UVA 1329——Corporative Network
  6. Codeforces 55D Beautiful Number (数位统计)
  7. electron 5.0.3版本 改动的地方
  8. P、NP、NP完全问题、NP难问题
  9. 数码相框项目之显示一张可放大、缩小、拖拽的图片
  10. java数字排序代码,进阶加薪全靠它!