1)第一种思路是每次确认当点元素为终节点的时候,由已经其他情况推出自己的情况
/**
* 最大上升子序列的长度
* 给定一个无序的序列,求其最大上升子序列的最大长度
* 子序列要为上升并且长度最长
* 思路:
* 序列一共k个点,{a1, a2, ..., ak} 以每个点为终点,这样就有k个状态,分别讨论它们的最长上升子序列,然后取最大的情况
* 维护一个一维数组maxLen[k],表示以序列元素{ak}为终点时的最长上升子序列
* 递推公式:
* maxLen[1] = {ak}
* maxLen[k] = Max{maxLen[i]} + 1(i为k左边的元素,并且ai小于ak,在这些元素中挑选出以该元素为终点,上升子序列最长的情况,加上{ak}自己,就是以{ak}为
* 终点的最长上升子序列)
*/
package dp;
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static int[] a = null;
static int[] maxLen = null;
public static void main(String[] args){
/**
* 输入
* 第一行:n 表示序列的长度
* 第二行:长度为n的序列,元素之间空格隔开
* 输出:
* 最长上升子序列的长度
* 测试结果:
* 输入:
* 7
1 7 3 5 9 4 8
输出:
4
*/
//代码实现
Scanner in = new Scanner(System.in);
int n = in.nextInt();