星南二楼(最长升序子序列)
Description
Input
Output
Sample
代码
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] grid = new int[n];
for(int j=0;j<n;j++) {
grid[j] = sc.nextInt();
}
System.out.print(process(grid));
}
public static int process(int[] array) {
int max = 1;
int dp[] = new int[array.length+1];
for(int i = 1;i<array.length+1;i++) {
dp[i] = 1;
for (int j = 1; j < i; j++) {
if (array[i-1] > array[j-1]) {
dp[i] = Math.max(dp[i], dp[j]+1);
}
}
max = Math.max(max,dp[i]);
}
return max;
}
}
思路
动态规划,每个元素对之前的元素进行遍历,使用递推方程式计算
同时返回dp里面最大的,而不是最后一个