package MOOC;
import java.util.Scanner;
/**
问题描述:
最长上升子序列
输入样例:
7
1 7 3 5 9 4 8
输出样例:
4
* @author Vivinia
*
* 2018年2月22日
*/
public class ZuiChang {
static int maxn=1010;
static int[] a=new int[maxn],maxLen=new int[maxn];
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
int n=input.nextInt();
for(int i=0;i<n;i++) {
a[i]=input.nextInt();
maxLen[i]=1;
}
input.close();
for(int i=1;i<n;i++) { //循环每次求以下标为i的数为终点的最长上升子序列的长度
for(int j=0;j<i;j++) //查看以下标为j的数为终点的最长上升子序列
if(a[i]>a[j])
maxLen[i]=Math.max(maxLen[i],maxLen[j]+1); //如果大于前边的下标为j的数,代表可以追加一个下标i的数,长度还能加1
}
int max=0;
for(int i=0;i<n;i++)
if(max<maxLen[i])
max=maxLen[i];
System.out.println(max);
}
}
子问题:
求以a[k]为终点的最长上升子序列的长度,当以某一个数为终点的时候,只要遍历出前边每个元素,如果比该终点小,那就maxLen[i]=Math.max(maxLen[i],maxLen[j]+1);