zoukankan      html  css  js  c++  java
  • 拦截导弹(dp、贪心、结论)

    题意

    给定一个序列,求能覆盖整个序列的最少的不上升子序列的个数。

    思路

    考虑贪心,维护一个数组,数组里面存的是每个不上升子序列的最后一个元素。

    遍历原序列中的每一个元素,如果当前元素比数组中所有的元素都大,即它不能作为之前那些不上升子序列的结尾。因此插入数组最后。

    反之,找到大于等于它的第一个元素,也就是它可以接在那个元素之后,即可作为那个不上升子序列的结尾,因此替换掉那个元素。

    通过上述过程的分析,发现问题转化为了求最长上升子序列问题。

    这里有两个结论:
    “能覆盖整个序列的最少的不上升子序列的个数”等价于“该序列的最长上升子序列长度”
    “能覆盖整个序列的最少的不下降子序列的个数”等价于“该序列的最长下降子序列长度”

    代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    
    using namespace std;
    
    const int N = 1010;
    
    int a[N], f[N], g[N];
    
    int main()
    {
        int n = 0, x;
        while(~scanf("%d", &x)) a[++ n] = x;
        int ans1 = 0, ans2 = 0;
        for(int i = 1; i <= n; i ++) {
            f[i] = 1, g[i] = 1;
            for(int j = 1; j < i; j ++) {
                if(a[j] >= a[i]) f[i] = max(f[j] + 1, f[i]);
                if(a[j] < a[i]) g[i] = max(g[j] + 1, g[i]);
            }
            ans1 = max(ans1, f[i]);
            ans2 = max(ans2, g[i]);
        }
        printf("%d
    %d", ans1, ans2);
        return 0;
    }
    
  • 相关阅读:
    Apriori 算法-如何进行关联规则挖掘
    Nginx 常用命令
    Nginx Location匹配规则
    Nginx 负载均衡
    angular 路由传参的三种方式
    JAVA中final关键字的作用
    Python函数参数和注解是什么
    JMeter测试计划配置项解析
    JMeter元件作用域实践指南
    原来Python函数只是个对象
  • 原文地址:https://www.cnblogs.com/miraclepbc/p/14454469.html
Copyright © 2011-2022 走看看