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
最长上升子序列(Longest Increasing Subsequence,简称 LIS)是一个经典的动态规划问题。给定一个无序的整数数组,找到其中最长上升子序列的长度。 上升子序列指的是一个子序列,它的每个元素都严格大于它前面的...
动态规划概念 最长上升子序列 最长公共子序列 矩阵连乘问题 背包问题 树形DP 状态压缩DP
在计算机科学领域,尤其是在算法设计与分析中,“最长上升子序列”是一个非常经典的问题,它不仅在理论研究中占有重要地位,而且在实际应用中也相当广泛。该问题的基本定义是从一个给定的数字序列中,找出一个最长的...
动态规划的经典题目最长上升子序列,而且是经过二分优化的NlogN复杂度算法
此外,最长上升子序列问题还有许多变种,如求解最长上升子序列的具体序列、最长上升子序列的数量、最长上升子序列的平均长度等,每一种变种都可能需要不同的算法和优化策略来解决。 值得注意的是,在编程竞赛和算法...
在计算机科学与算法设计领域,最长上升子序列问题是一个经典的动态规划问题,同时也有基于动态规划的改进方法。该问题的目标是在一个无序的整数序列中找出一个最长的上升子序列,即子序列中的数字是单调递增的。以下...
最长上升子序列问题(Longest Increasing Subsequence, 简称LIS),是计算机科学领域中一种经典的动态规划问题,主要用来求解一组数中的最长上升子序列的长度。所谓“上升子序列”,指的是序列中任意两个相邻的数...
1. 最长上升子序列(Longest Increasing Subsequence,简称LIS)问题: - 这是一个经典的算法问题,指的是在一组数列中找到一个最长的子序列,使得子序列中任意两个数a[i]和a[j]满足i时,都有a[i][j]。 - 在文件...
1259:【例9.3】求最长不下降序列 【题目描述】 设有由n(1≤n≤200)个不相同的整数组成的数列,记为:b(1)、b(2)、……、b(n)且b(i)≠b(j)(i≠j),若存在i1…且有b(i1)(i2)<…(ie)则称为长度为e的不下降序列。程序...
3. **最长上升子序列 (LIS)**:对于一个序列S,其最长上升子序列是指S中的一个子序列,该子序列是严格递增的,且长度最长。 #### 三、问题定义 假设我们有两个字符串(或整数序列)a和b,我们的目标是找到这两个...
最长上升子序列(Longest Increasing Subsequence,简称LIS)问题,是算法与编程领域内一个基础且经典的动态规划问题。它关注于在一个给定的无序序列中,如何高效地找到一个最长的单调递增的子序列(即每个元素都不...