zoukankan      html  css  js  c++  java
  • 简单的dp加贪心

    题目链接:传送门

    这个题目让我纠结了好久,之后恍然大悟是求最长的递减序列,并加上贪心的算法,如果有大于两个的发射系统,应该判断使导弹的高度与此时个个发射系统的高度比较,选取高度差最小的去执行这次的拦截,这样才能保证发射系统的数量最小

    代码:

    
    
    #include<stdio.h>
    #define INF 0x7ffffff
    #define MAXN 10000
    int dp[MAXN];//dp[i]代表第i个导弹当前拦截的高度
    int main()
    {
        int n,x,i,res,flag;
        int min;
        while(scanf("%d",&n)!=EOF)
        {
            res=0;
            while(n--)
            {
                scanf("%d",&x);
                flag=0;
                min=INF;
                int tempi;            
                for(i=0;i<res;i++)
                {                                //其中min>dp[i]-x的条件是选取差值较小的去打 
                    if(x<=dp[i]&&min>dp[i]-x)   //寻找最长的序列,更新 
                    {
                        min=dp[i]-x;
                        //dp[i]=x;
                        tempi=i;
                        flag=1;
                    }    
                }
                if(flag==0)
                {
                    dp[res]=x;
                    res++;
                }        
                else dp[tempi]=x;
            }
            printf("%d
    ",res);    
        }    
        return 0;
    }   
    
    
  • 相关阅读:
    hashlib模块
    sys模块
    random模块
    time模块
    生成器、迭代器
    装饰器
    函数相关内容
    集合相关操作
    springcloud(四):Eureka的配置详解
    springcloud(二):Eureka服务注册与发现
  • 原文地址:https://www.cnblogs.com/fzuljz/p/5711131.html
Copyright © 2011-2022 走看看