`

8596 最长上升子序列

 
阅读更多

8596 最长上升子序列(必做)

时间限制:300MS  内存限制:1000K
提交次数:255 通过次数:118

题型: 编程题   语言: C++;C;VC;JAVA

Description

A numeric sequence of ai is ordered if a1 < a2 < ... < aN. 
Let the subsequence of the given numeric sequence (a1, a2, ..., aN) be any sequence (ai1, ai2, ..., aiK), where 1 <= i1 < i2 < ... < iK <= N. 
For example, sequence (1, 7, 3, 5, 9, 4, 8) has ordered subsequences, e. g., (1, 7), (3, 4, 8) and many others. 
All longest ordered subsequences are of length 4, e. g., (1, 3, 5, 8). 

Your program, when given the numeric sequence, must find the length of its longest ordered subsequence. 




输入格式

There are several test cases. Every test case includes two lines. 
The first line contains the length of sequence N. The second line contains the elements of sequence - N integers in the range from 0 to 10000 each, 
separated by spaces. 1 <= N <= 1000 
When N is 0, it indicates test to end. 



输出格式

Output must contain a single integer for every test case ---- the length of the longest ordered subsequence of the given sequence. 



输入样例

7
1 7 3 5 9 4 8
6
1 8 3 6 5 9
5
1 2 3 4 5
0



输出样例

4
4
5

 

#include <iostream>

#include <stdio.h>

using namespace std;

int n;

int a[10000];  //The second line contains the elements of sequence - N integers in the range from 0 to 10000 each,

int f[10000];  // 注意数组大小

int max1=0;

int num=0;

void searchM()

{

 

    for(int i=0;i<n;i++)

    {

        f[0] = 1; max1 = 0;  //初始化

       for(int j=0;j<i;j++)  // 从0到i的前一位

       {

           if(a[i]>a[j])   // 如果比当前位小

           {

               if(max1 < f[j]) // 更新 记录最大长度 注意是J

             max1 = f[j];

           }

       }

       f[i] = max1+1;  //把从第一位到当前位的最大长度+1 (加上自身)

    }

}

 

int main()

{

    //freopen("in.txt","r",stdin);

    cin >>n;

    while(n)

    {

        for(int i=0;i<n;i++)

            cin >>a[i];

        searchM() ;

        int temp=f[0];

        for(int i=1;i<n;i++)

        {

            if(f[i]>temp)

                temp=f[i];

        }

        cout<< temp<<endl;

 

        cin >>n;

    }

 

    return 0;

}

 

分享到:
评论

相关推荐

    求出最长上升子序列中各个元素

    在算法领域,最长上升子序列(Longest Increasing Subsequence,LIS)问题是一个经典的问题,它在计算机科学中有着广泛的应用,例如在数据结构、排序算法以及动态规划等方面。本篇将详细介绍如何找出一个序列中长度...

    最长上升子序列

    你的任务,就是对于给定的序列,求出最长上升子序列的长度。 输入样例 7 1 7 3 5 9 4 8 6 1 8 3 6 5 9 5 1 2 3 4 5 0 输出样例 4 4 5 提示 一,对输入字符串的处理 注意:这道题和其他题的输入输出不同,这题...

    最长上升子序列nlgn源码

    输入序列,求最长上升子序列的长度,算法复杂度nlgn

    什么是最长上升子序列,和最长不下降子序列有什么区别

    最长上升子序列(Longest Increasing Subsequence,简称 LIS)是一个经典的动态规划问题。给定一个无序的整数数组,找到其中最长上升子序列的长度。 上升子序列指的是一个子序列,它的每个元素都严格大于它前面的...

    动态规划动态规划概念 最长上升子序列 最长公共子序列 矩阵连乘问题 背包问题 树形DP 状态压缩DP

    动态规划概念 最长上升子序列 最长公共子序列 矩阵连乘问题 背包问题 树形DP 状态压缩DP

    最长上升子序列优化代码

    动态规划的经典题目最长上升子序列,而且是经过二分优化的NlogN复杂度算法

    1281:最长上升子序列.7z

    1259:【例9.3】求最长不下降序列 【题目描述】 设有由n(1≤n≤200)个不相同的整数组成的数列,记为:b(1)、b(2)、……、b(n)且b(i)≠b(j)(i≠j),若存在i1…且有b(i1)(i2)&lt;…(ie)则称为长度为e的不下降序列。程序...

    53、1281:最长上升子序列(A)+书画相关链接(十七)-2020.01.19.pdf

    1. 最长上升子序列(Longest Increasing Subsequence,简称LIS)问题: - 这是一个经典的算法问题,指的是在一组数列中找到一个最长的子序列,使得子序列中任意两个数a[i]和a[j]满足i时,都有a[i][j]。 - 在文件...

    最长公共上升子序列(LCIS)的平方算法

    3. **最长上升子序列 (LIS)**:对于一个序列S,其最长上升子序列是指S中的一个子序列,该子序列是严格递增的,且长度最长。 #### 三、问题定义 假设我们有两个字符串(或整数序列)a和b,我们的目标是找到这两个...

    C语言:基于c代码实现的最长上升子序列

    标题中提到的知识点是"C语言:基于c代码实现的最长上升子序列",描述部分则简单地提到了"最长上升子序列"。在给出的内容中,是一段C语言的代码,这段代码实现的是求解一个序列中最长上升子序列的长度。 首先,我们...

    最长上升子序列.docx

    ### 最长上升子序列(LIS)知识点详解 #### 一、定义与应用场景 最长上升子序列(Longest Increasing Subsequence, 简称LIS)问题是寻找一个序列中最长的递增子序列。这里提到的“子序列”指的是原序列中的一些元素按...

    53、1281:最长上升子序列(B)+书画相关链接(十七)-2020.01.19.pdf

    【最长上升子序列】是计算机科学中的一个经典问题,尤其在算法竞赛如CSP-J和CSP-S中常被考察。这个问题的目的是在一个给定的整数序列中找到最长的非降序子序列的长度。这里有两个不同的解决方案,都是用C++编写的。 ...

    最长上升子序列(信息学奥赛一本通-T1281).rar

    最长上升子序列(LIS,Longest Increasing Subsequence)是计算机科学中,特别是算法竞赛和信息学领域的一个经典问题。该问题要求在一个给定的序列中找到一个尽可能长的严格递增子序列。例如,对于序列 [10, 9, 2, 5...

    Java实现 LeetCode 300 最长上升子序列

    300. 最长上升子序列 给定一个无序的整数数组,找到其中最长上升子序列的长度。 示例: 输入: [10,9,2,5,3,7,101,18] 输出: 4 解释: 最长的上升子序列是 [2,3,7,101],它的长度是 4。 说明: 可能会有多种最长上升子...

    最长上升子序列:从理论到实践.zip

    最长上升子序列通过本文的介绍,相信你对最长上升子序列问题有了更为深入的了解。无论是从理论角度还是实践角度,最长上升子序列都是一个值得深入研究和探索的问题。希望本文能为你提供有益的参考和启发,助你在算法...

    动态规划经典问题算法:合唱队行,最大k乘积,0-1背包问题,最长上升子序列,田忌赛马,花瓶插花

    下面,我们将讨论动态规划经典问题算法,包括合唱队行、最大 k 乘积、0-1 背包问题、最长上升子序列、田忌赛马、花瓶插花等。 一、合唱队行 合唱队行是动态规划经典问题之一。该问题可以描述为:有 n 个人站在一排...

    javascript-leetcode面试题解动态规划问题之第300题最长上升子序列-题解.zip

    本题解聚焦于LeetCode的第300题——最长上升子序列(Longest Increasing Subsequence, LIS),这是一个典型的动态规划问题。 动态规划是算法设计的一种策略,通过将复杂问题分解成更小的子问题来解决。在最长上升子...

    js代码-16.4 最长上升子序列

    在JavaScript编程领域,"最长上升子序列"(Longest Increasing Subsequence, LIS)是一个经典的算法问题,它在数组或序列中寻找一个具有最长连续递增顺序的子序列。这个题目通常出现在数据结构与算法的学习中,是...

Global site tag (gtag.js) - Google Analytics