Loading...

【动态规划】最长上升子序列(一)

在这里插入图片描述

求解代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
        public int LIS(int[] arr) {
        if(arr==null||arr.length==0){
            return 0;
        }

        int[] dp = new int[arr.length];
        Arrays.fill(dp, 1);
        int ans = 1;

        for(int i=1;i<arr.length;i++){
            for(int j=0;j<i;j++){
                if(arr[i]>arr[j]){
                    dp[i]=Math.max(dp[j]+1, dp[i]);
                }
                
            }
            ans = Math.max(ans,dp[i]);
        }
        return ans;
    }

小贴士

状态转移:dp[i] = 前j个的最长长度+1 和 当前dp[i]的最大值

Code Road Record