我们先设,这一串序列为nums[],并且令f[i]都为1,f[i]的意义是以第i个为结尾的上升子序列长度。当他们都不严格递增的时候,结果就都是1
这道题的核心在于,我们可以注意到,当nums[i]>nums[j]的时候,如果f[j]+1>f[i],则f[i]=max(f[j]+1,f[i]),在这样的一轮下来之后,我们直接求f[]中的最大值即可(动态规划问题未必都是打印最后的f[n]或者f[n][m],切忌思维定式)
f[i] = max(f[i], f[j] + 1)
----------
int max=1;
for (int i = 0; i < T; i++) {
f[i]=1;
for (int j = 0; j < i; j++) {
if(nums[i]>nums[j]) f[i]=Math.max(f[i],f[j]+1);
}
max=Math.max(max,f[i]);
}
System.out.println(max);