zoukankan      html  css  js  c++  java
  • 51nod 1191 消灭兔子

    题目来源: 2013腾讯马拉松赛第三场

    基准时间限制:1 秒 空间限制:131072 KB 分值: 40 难度:4级算法题

    有N只兔子,每只有一个血量B[i],需要用箭杀死免子。有M种不同类型的箭可以选择,每种箭对兔子的伤害值分别为D[i],价格为P[i](1 <= i <= M)。假设每种箭只能使用一次,每只免子也只能被射一次,计算要消灭地图上的所有兔子最少需要多少Q币。如不能杀死所有兔子,请输出No Solution。
    特别说明:1、当箭的伤害值大于等于兔子的血量时,能将兔子杀死;2、血量B[i],箭的伤害值D[i],箭的价格P[i],均小于等于100000。
     
    Input
    第1行:两个整数N,M,中间用空格分隔(1 <= N, M <= 50000),分别表示兔子的个数和箭的种类。
    第2 - N + 1行:每行1个正整数(共N行),表示兔子的血量B[i](1 <= B[i] <= 100000)。
    第N + 2 - N + M + 1行:每行2个正整数(共M行),中间用空格分隔,表示箭所能造成的伤害值D[i],和需要花费的Q币P[i](1 <= D[i], P[i] <= 100000)。
    Output
    输出最少需要多少Q币才能消灭所有的兔子。如果不能杀死所有兔子,请输出"No Solution"。
    Input示例
    3 3
    1
    2
    3
    2 1
    3 2
    4 3
    Output示例
    6
     
    优先队列+贪心
    血量从大到小排序
    伤害从大到小排序
    把每次伤害大于等于血量的弹进优先队列 
    若队列为空则杀不死
    #include <algorithm>
    #include <cstdio>
    #include <queue>
    #define N 50005
    int n,m,B[N];
    using namespace std;
    
    struct node
    {
        int D,P;
        bool operator<(node a)const
        {
            return P>a.P;
        }
    }Arrow[N];
    priority_queue<node>q;
    bool use[N];
    int B_cmp(int a,int b){return a>b;}
    bool A_cmp(node a,node b){return a.D>=b.D;}
    int main(int argc,char *argv[])
    {
        scanf("%d%d",&n,&m);
        for(int i=1;i<=n;++i) scanf("%d",&B[i]);
        for(int i=1;i<=m;++i) scanf("%d%d",&Arrow[i].D,&Arrow[i].P);
        sort(B+1,B+1+n,B_cmp);
        sort(Arrow+1,Arrow+1+m,A_cmp);
        int j=1,ans=0;
        for(int i=1;i<=n;++i)
        {
            for(;j<=m;++j)
            {
                if(Arrow[j].D>=B[i]) q.push(Arrow[j]);
                else break;
            }
            if(q.empty()) {printf("No Solution
    ");return 0;}
            else {ans+=q.top().P;q.pop();}
        }
        printf("%d",ans);
        return 0;
    }
     
    我们都在命运之湖上荡舟划桨,波浪起伏着而我们无法逃脱孤航。但是假使我们迷失了方向,波浪将指引我们穿越另一天的曙光。
  • 相关阅读:
    「UVA12293」 Box Game
    「CF803C」 Maximal GCD
    「CF525D」Arthur and Walls
    「CF442C」 Artem and Array
    LeetCode lcci 16.03 交点
    LeetCode 1305 两棵二叉搜索树中的所有元素
    LeetCode 1040 移动石子直到连续 II
    LeetCode 664 奇怪的打印机
    iOS UIPageViewController系统方法崩溃修复
    LeetCode 334 递增的三元子序列
  • 原文地址:https://www.cnblogs.com/ruojisun/p/7588127.html
Copyright © 2011-2022 走看看