zoukankan      html  css  js  c++  java
  • P4823 [TJOI2013]拯救小矮人

    发现无论选择哪些逃跑的小矮人,让他们按逃跑能力从小到大逃走肯定可行。考虑最终序列互换相邻两个小矮人,并且这只跟自己有关显然满足严格弱序。

    然后就建个存身高的堆,如果某个小矮人出不去且换掉之前身高最大的小矮人就能出去且当前身高小于换掉的身高就反悔,这样会使得人梯高度增加。

    会不会出现换下来若干个小矮人换上去同样数量的小矮人并且必须是一起换的情况呢?

    如果单独换不优,那去掉这一对肯定不劣啊。

    code:

    #include<bits/stdc++.h>
    using namespace std;
    #define For(i,x,y)for(i=x;i<=(y);i++)
    struct dwarf
    {
    	int a,b;
    }p[2005];
    priority_queue<int>pri;
    inline bool cmp(dwarf _,dwarf __)
    {
    	return _.a+_.b<__.a+__.b;
    }
    int main()
    {
    	int n,i,tot=0,h;
    	cin>>n;
    	For(i,1,n)cin>>p[i].a>>p[i].b,tot+=p[i].a;
    	sort(p+1,p+n+1,cmp);
    	cin>>h;
    	For(i,1,n)
    	if(tot+p[i].b>=h)pri.push(p[i].a),tot-=p[i].a;
    	else if(!pri.empty()&&pri.top()>p[i].a&&tot+pri.top()+p[i].b>=h)
    	{
    		tot+=pri.top()-p[i].a;
    		pri.pop();
    		pri.push(p[i].a);
    	}
    	cout<<pri.size();
    	return 0;
    }
    
  • 相关阅读:
    CocoaPods 安装教程
    iOS 如何使用第三方字库
    iOS 获取当前网络状态
    GitHub上README.md教程
    如何获取iOS软件包内容
    iOS中如何监测来电
    OS 如何选择delegate、notification、KVO?
    iOS-Block总结 && 全面解析逆向传值
    iOS面试题
    iOS优秀博客收录
  • 原文地址:https://www.cnblogs.com/May-2nd/p/14902706.html
Copyright © 2011-2022 走看看