zoukankan      html  css  js  c++  java
  • ModricWang的导弹拦截系统1564(LIS模板题)

    题目描述

    某Modric为了防御敌国的导弹袭击,发展出一种导弹拦截系统。但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。某天,雷达捕捉到敌国的导弹来袭。由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。

    输入

    第一个数为数据组数n,n<16

    第二行为n个整数,为导弹依次飞来的高度

    输出

    一个整数,这套系统最多能拦截多少导弹

    输入样例

    8
    389 207 155 300 299 170 158 65

    输出样例

    6

    LIS模板题,求最长下降子序列时反向输入数组元素即可。
    AC代码
    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    
    const int maxn=20;
    int a[maxn];
    //dp[i]表示以第i个元素结尾的最长递增子序列的长度
    int dp[maxn];
    int LIS(int a[],int n){
        int maxe=-1;
        for(int i=1;i<=n;++i)
            dp[i]=1;
        for(int i=2;i<=n;++i){
            maxe=-1;
            for(int j=1;j<=i-1;++j){
                if(a[i]>a[j]&&dp[j]>maxe){
                    maxe=dp[j];
                }
            }
            dp[i]=maxe+1;
        }
        maxe=dp[1];
        for(int i=1;i<=n;++i){
            if(dp[i]>maxe)
                maxe=dp[i];
        }
        return maxe;
    }
    int main(){
        int n,ans;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            scanf("%d",&a[n-i+1]);
        }
        ans=LIS(a,n);
        printf("%d
    ",ans);
    }

    LIS模板

    #include <cstdio>
    #include <cstring>
    #include <iostream>
    #include<algorithm>
    #include<queue>
    using namespace std;
    
    const int maxn=20;
    int a[maxn];
    //dp[i]表示以第i个元素结尾的最长递增子序列的长度
    int dp[maxn];
    int LIS(int a[],int n){
        int maxe=-1;
        for(int i=1;i<=n;++i)
            dp[i]=1;
        for(int i=2;i<=n;++i){
            maxe=-1;
            for(int j=1;j<=i-1;++j){
                if(a[i]>a[j]&&dp[j]>maxe){
                    maxe=dp[j];
                }
            }
            dp[i]=maxe+1;
        }
        maxe=dp[1];
        for(int i=1;i<=n;++i){
            if(dp[i]>maxe)
                maxe=dp[i];
        }
        return maxe;
    }
    int main(){
        int n,ans;
        scanf("%d",&n);
        for(int i=1;i<=n;++i){
            scanf("%d",&a[n]);
        }
        ans=LIS(a,n);
        printf("%d
    ",ans);
    }
     
  • 相关阅读:
    你都这么拼了,面试官TM怎么还是无动于衷
    js中string转map的方法
    如何使用jmeter做一个功能的性能测试
    如何看待远程办公?
    vue.js指令v-for使用以及下标索引的获取
    v-charts x轴字体斜显示
    Linux-(inotify-tools&rsync)
    Linux-(type,vim)
    zab协议
    数据库的规范一览
  • 原文地址:https://www.cnblogs.com/loganlzj/p/10098172.html
Copyright © 2011-2022 走看看