给一个序列,求他的最长不下降序列。(并不是连续的序列)
题意不多叙述了。
思路:
定义一个f [ ] 数组,这个数组是用来保存 第 i 个元素的最长不下降序列值。
f [ ]数组里面的最大值,就是最长子序列。
例如:
arr 13 7 9 16 38 24 37 18 44 19 21 22
f 1 1 2 3 4 4 5 4 6 5 6 7
状态转移方程:
初始化,所以f [ i ] = 1;
if (arr [ j ] <= arr [ i ] ) f [ i ] = max ( f [ i ] , f [ j ] + 1) ;
结果:
输出 f 数组里面的最大值
时间复杂度:
O( n * n ),两个循环。