• ACwing895. 最长上升子序列


    题目:
    给定一个长度为N的数列,求数值严格单调递增的子序列的长度最长是多少。

    输入格式:
    第一行包含整数N。

    第二行包含N个整数,表示完整序列。

    输出格式:
    输出一个整数,表示最大长度。

    数据范围:

    [1 leq N leq 1000, −10^9 leq 数列中的数 leq 10^9 ]

    输入样例:

    7
    3 1 2 1 8 5 6
    

    输出样例:

    4
    

    思路:
    首先要知道状态划分此时可以用一维表示、就直接想到f[i]了。其次、该集合表示的是所有以a[i]结尾的上升子序列、我们只需要在这些子序列中求出一个最大的即可。如何划分呢?想到从倒数第一个数开始、发现倒数第一个数可能为空、也可能为1、故从倒数第二个数开始分析、求出最大的序列、最后一列数加上1即为所求。划分依据是最后一个不同的点。

    代码:

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int N = 1010;
    
    int n;
    int a[N];
    int f[N];
    int main()
    {
        scanf("%d", &n);
        
        for(int i = 1; i <= n ; i++) scanf("%d", &a[i]);
        
        for(int i = 1; i <= n ; i ++)
        {
            f[i] = 1;   //只有一个数的情况
            for(int j = 1 ; j <= i ; j ++)
            {
                if(a[j] < a[i]) //如果该数在a[i]后面、则更新
                    f[i] = max(f[i], f[j] + 1);
            }
        }
        
        int res = 0;
        //在所有集合中找出最大值即为所求
        for(int i = 1 ; i <= n ; i ++) res = max(res, f[i]);    
        printf("%d
    ", res);
        return 0;
    }
    
  • 相关阅读:
    How to extract msu/msp/msi/exe files from the command line
    Windbg and resources leaks in .NET applications 资源汇总
    [c# 20问] 3.String和string的区别
    [c# 20问] 2.如何转换XML文件
    [c# 20问] 1. 何时使用class与struct
    安装配置BITS上传服务
    The J-Link hardware debugging Eclipse plug-in
    swift material
    SCLButton
    ChatCell
  • 原文地址:https://www.cnblogs.com/xiaofrank/p/14324351.html
Copyright © 2020-2023  润新知