zoukankan      html  css  js  c++  java
  • hdu 4544 优先队列+贪心

    题意:最近,减肥失败的湫湫为发泄心中郁闷,在玩一个消灭免子的游戏。
    游戏规则很简单,用箭杀死免子即可。
    箭是一种消耗品,已知有M种不同类型的箭可以选择,并且每种箭都会对兔子造成伤害,对应的伤害值分别为Di(1 <= i <= M),每种箭需要一定的QQ币购买。
    假设每种箭只能使用一次,每只免子也只能被射一次,请计算要消灭地图上的所有兔子最少需要的QQ币。

    链接:点我

    贪心在能杀死某个兔子的箭里选择价格最小的

    一开始直接两个for,tle,看了别人代码之后才知道用优先队列

     1 #include<cstdio>
     2 #include<iostream>
     3 #include<algorithm>
     4 #include<cstring>
     5 #include<cmath>
     6 #include<queue>
     7 #include<map>
     8 using namespace std;
     9 #define MOD 1000000007
    10 const int INF=0x3f3f3f3f;
    11 const double eps=1e-5;
    12 #define cl(a) memset(a,0,sizeof(a))
    13 #define ts printf("*****
    ");
    14 const int MAXN=100005;
    15 int b[MAXN],d[MAXN],p[MAXN];
    16 int n,m,tt;
    17 struct node
    18 {
    19     int d,p;
    20 }a[MAXN];
    21 bool cmp1(node a,node b)
    22 {
    23     return a.d>b.d;
    24 }
    25 struct cmp
    26 {
    27     bool operator()(int x,int y)
    28     {
    29         return x>y;
    30     }
    31 };
    32 priority_queue<int,vector<int>,cmp > q;
    33 bool vis[MAXN];
    34 int main()
    35 {
    36     int i,j,k;
    37     #ifndef ONLINE_JUDGE
    38     freopen("1.in","r",stdin);
    39     #endif
    40     while(scanf("%d%d",&n,&m)!=EOF)
    41     {
    42         while(!q.empty())   q.pop();
    43         for(i=0;i<n;i++)    scanf("%d",&b[i]);
    44         for(i=0;i<m;i++)    scanf("%d",&a[i].d);
    45         for(i=0;i<m;i++)    scanf("%d",&a[i].p);
    46         sort(b,b+n);
    47         sort(a,a+m,cmp1);
    48         long long ans=0;
    49         bool f=1;
    50         int t=0;
    51         for(i=n-1;i>=0;i--)
    52         {
    53             while(t<=m-1&&a[t].d>=b[i])
    54             {
    55                 q.push(a[t].p);
    56                 t++;
    57             }
    58             if(q.empty())
    59             {
    60                 f=0;
    61                 break;
    62             }
    63             ans+=q.top();
    64             q.pop();
    65         }
    66         if(!f)  printf("No
    ");
    67         else printf("%I64d
    ",ans);
    68     }
    69 }
  • 相关阅读:
    20189317 《网络攻防技术》 第四周作业
    20189317 《网络攻防技术》 第三周作业
    20189317 《网络攻防技术》 第二周作业
    2018-2019-2 20189317 《网络攻防技术》 第一周作业
    20189311《网络攻防》第十周作业
    20189311《网络攻防》第九周作业
    20189311《网络攻防》第八周作业
    20189311《网络攻防》第七周作业
    20189311《网络攻防》第六周作业
    20189311《网络攻防》第五周作业
  • 原文地址:https://www.cnblogs.com/cnblogs321114287/p/4472922.html
Copyright © 2011-2022 走看看