题解 | #最长上升子序列(一)#
最长上升子序列(一)
https://www.nowcoder.com/practice/5f65ccbb025240bd8458eb6479c2612e
#include <cstdio>
int main(){
int n,i,index;
scanf("%d",&n);;
int a[n];
for(i = 0;i< n;i++) {
scanf("%d",&a[i]);
}
int L[1000];
for (i = 0; i < n; ++i) { //初始化,最长递增子序列长度为1
L[i] = 1;
}
for (i = 1; i < n; ++i) { //依次计算a【0】-a【i】的最长递增子序列
int max = 1; // 初试时,递增子序列长度为1
for (int j = i - 1; j >= 0; --j) {
if ((a[j] < a[i]) && (max < L[j] + 1)) { //对于所有的a[j] < a[i],需要满足严格上升,且始终为最大长度
max = L[j] + 1;
L[i] = max;
}
}
}
for (index = 0,i=1; i < n; ++i) { // 求所有子序列的最大长度
if (L[index] < L[i]){
index = i;
}
}
printf("%d",L[index]);
return 0;
}
