zoukankan      html  css  js  c++  java
  • HDU 2831 (贪心)

    题目链接http://acm.hdu.edu.cn/showproblem.php?pid=2831

    题目大意:植物大战僵尸。给定种植植物时间间隔t,以及每个僵尸的到达时间v,生命d。问是否能赢。

    解题思路

    按照打完每只Zombie之后剩余时间v-d,从小到大排序。

    理由如下:

    设打完第i只Zombie的剩余时间为:$Remain(v,d)=V-i*t-D$

    那么本题的目标函数为:$argmax limits_{i}sum Remain(v,d)=V-i*t-D$

    所以,应当尽可能把v-d较小的值放在i的前面,让Remain(v,d)尽可能大。

    排序完之后,进行模拟,now=0,当前时间为0

    从第1只Zombie算起,now+=t:

    $if quad Attack Time<D quad thenquad GameOver$

    注意,不可以取等,样例说明,正好到达位置被打死也会GameOver。

    #include "cstdio"
    #include "algorithm"
    using namespace std;
    struct Zombie
    {
        int v,d,idx;
        bool operator < (const Zombie &a) const {return v-d<a.v-a.d;}
    }z[105];
    int main()
    {
        //freopen("in.txt","r",stdin);
        int n,t;
        while(scanf("%d%d",&n,&t)!=EOF)
        {
            for(int i=0;i<n;i++) scanf("%d%d",&z[i].v,&z[i].d),z[i].idx=i+1;
            sort(z,z+n);
            int now=0;
            bool flag=true;
            for(int i=0;i<n;i++)
            {
                now+=t;
                int ret=z[i].v-now;
                if(ret<z[i].d) {flag=false;break;}
            }
            if(flag)
            {
                for(int i=0;i<n-1;i++) printf("%d ",z[i].idx);
                printf("%d
    ",z[n-1].idx);
            }
            else printf("The zombies eat your brains!
    ");
        }
    }
  • 相关阅读:
    ThinkPHP-5.0.23新的RCE漏洞测试和POC
    利用DNS日志进行MySQL盲注
    Prometheus自动发现
    relabel_config
    Maven安装
    Redis安装
    Node.js安装
    MySQL-5.7安装
    设计模式【1】------>单例模式
    Java设计模式概念以及六大设计原则
  • 原文地址:https://www.cnblogs.com/neopenx/p/4517712.html
Copyright © 2011-2022 走看看