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 提示 一,对输入字符串的处理 注意:这道题和其他题的输入输出不同,这题...
引出 问题描述:给出一个序列a1,a2,a3,a4,a5,a6,a7....an,求它的一个子序列(设为s1,s2,...sn),使得这个子序列满足这样的性质,s1并且这个子序列的长度最长...例如有一个序列:1735948,它的最长上升子序列就是1348长度为4.
输入序列,求最长上升子序列的长度,算法复杂度nlgn
最长上升子序列(Longest Increasing Subsequence,简称 LIS)是一个经典的动态规划问题。给定一个无序的整数数组,找到其中最长上升子序列的长度。 上升子序列指的是一个子序列,它的每个元素都严格大于它前面的...
动态规划概念 最长上升子序列 最长公共子序列 矩阵连乘问题 背包问题 树形DP 状态压缩DP
最长上升子序列 最长上升子序列 最长上升子序列 最长上升子序列 最长上升子序列
动态规划的经典题目最长上升子序列,而且是经过二分优化的NlogN复杂度算法
最长上升子序列 最长上升子序列 最长上升子序列 最长上升子序列 最长上升子序列
Acwing 最长上升子序列 最长上升子序列 最长上升子序列 最长上升子序列 最长上升子序列
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,我们的目标是找到这两个...
最长上升子序列,对于一个数字序列,请设计一个复杂度为O(nlogn)的算法,返回该序列的最长上升子序列的长度,这里的子序列定义为这样一个序列U1,U2...,其中Ui ,且A[Ui] [Ui+1]。 给定一个数字序列A及序列的长度n...
最长上升子序列