zoukankan      html  css  js  c++  java
  • HDU 4544

    贪心算法+优先队列。

    很明显是应当先消灭blood值大的,那么注意到,对于少blood值的,能灭大blood值的箭必定能消灭小blood值的,所以,可以先排序,在消灭一个blood值的时候,选择一个小Q币的即可。

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #define LL __int64
    using namespace std;
    
    const int MAXN=100005;
    int blood[MAXN];
    
    struct Node{
    	int p,dam;
    	bool operator <(const Node &a) const{
    		if(p>a.p) return true;
    		return false;
    	}
    }hert[MAXN];
    
    bool cmp1(Node a,Node b){
    	if(a.dam>b.dam) return true;
    	return false;
    }
    
    bool cmp2(int a,int b){
    	if(a>b) return true;
    	return false;
    }
    
    int main(){
    	int n,m;
    	while(scanf("%d%d",&n,&m)!=EOF){
    		priority_queue<Node>que;
    		for(int i=0;i<n;i++)
    		scanf("%d",&blood[i]);
    		for(int i=0;i<m;i++){
    			scanf("%d",&hert[i].dam);
    		}
    		for(int i=0;i<m;i++)
    		scanf("%d",&hert[i].p);
    		sort(blood,blood+n,cmp2);
    		sort(hert,hert+m,cmp1);
    		LL ans=0;
    		int j=0;
    		bool flag=true;
    		for(int i=0;i<n;i++){
    			for(;j<m&&hert[j].dam>=blood[i];j++){
    				que.push(hert[j]);
    			}
    			if(que.empty()){
    				flag=false;
    				break;
    			}
    			ans+=que.top().p;
    			que.pop();
    		}
    		if(!flag){
    			puts("No");
    		}
    		else printf("%I64d
    ",ans);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    HTML标签,简单归纳
    表单<form></form>提交方式的区别
    Angular实战记录
    JavaScript常用编程问题记录
    Observable 的 Operators集合
    一些重要的学习资料
    周末
    vue2.0传值问题
    javascript日常学习小记
    web前端经典小题
  • 原文地址:https://www.cnblogs.com/jie-dcai/p/4366950.html
Copyright © 2011-2022 走看看