动态规划之线性dp(LIS)
最长上升子序列。给定一个长度为n的数列a,求数值单调递增的子序列的长度最长是多少
代码:
import java.util.Scanner;
public class Main {
static long[] arr=new long[300005];
static long[] dp=new long[300005];//dp数组表示当前位置的最大长度
static long res=0;
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
for(int i=0;i<n;i++) {
arr[i]=sc.nextLong();
dp[i]=1;//将所有的位置的dp值都赋值为1
}
for(int i=1;i<n;i++) {
for(int j=0;j<i;j++) {
if(arr[j]<arr[i]) {
//如果后面的大于前面的,就让后面的取前面的dp值加一与后面的dp值的最大值
dp[i]=Math.max(dp[j]+1, dp[i]);
}
}
res=Math.max(res, dp[i]);
}
System.out.println(res);
}
}