zoukankan      html  css  js  c++  java
  • 【CF1257D】Yet Another Monster Killing Problem【贪心】

    题意:给定一些怪物,每天可以选一个勇士进去打怪,每个勇士每天只能打不超过si个怪物,每个勇士只能打能力值≤pi的怪物,问最少多少天打完所有怪物

    题解:贪心,每天尽可能多的去打怪,那么存一个对于长度为i的怪物可以用的最大的能力值是多少,每天枚举长度,尽可能长的去打怪即可

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstdlib>
    #include<cstring>
    #include<string>
    #include<algorithm>
    #include<cmath>
    #define ll long long
    using namespace std;
    int T,n,m,ans;
    int a[200001],mx[200001];
    struct node
    {
        int p,s;
    }b[200001];
    bool cmp(const node &T1,const node &T2){return T1.s>T2.s;}
    int main()
    {
        scanf("%d",&T);
        while(T--)
        {
          for(int i=1;i<=n;i++)mx[i]=0;
          scanf("%d",&n);
          for(int i=1;i<=n;i++)scanf("%d",&a[i]);
          scanf("%d",&m);
          for(int i=1;i<=m;i++)scanf("%d%d",&b[i].p,&b[i].s);
          sort(b+1,b+1+m,cmp);
          int j=1,t=0;
          for(int i=n;i>0;i--)
          {
            while(j<=m && b[j].s>=i)
            {
              t=max(t,b[j].p);
              j++;
            }
            mx[i]=t;
          }
          ans=0;j=1;t=0;
          for(int i=1;i<=n;i++)
          {
            t=max(t,a[i]);
            if(t>mx[j])
            {
              //printf("%d %d %d %d
    ",i,j,a[i],mx[j]);
              if(j==1){ans=-1;break;}
              ans++;j=1;i--;t=0;
            }
            else j++;
          }
          if(ans>-1)ans++;
          //for(int i=1;i<=n;i++)printf("%d ",mx[i]);
          printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    byte b=1、b=b+1、b+=1
    parameter ‘0’ not found
    Java设计模式—Singleton
    EL JSTL(得劲)
    天网恢恢Filter 窃听风云Listener
    Jsp学习总结(二)
    Jsp学习总结(一)
    Bugs(识破)
    [PAT乙级] Practise 1016 部分A+B
    [PAT乙级] Practise 1015 德才论
  • 原文地址:https://www.cnblogs.com/worcher/p/11865158.html
Copyright © 2011-2022 走看看