最长递增子序列!!!(DP ,二分)

最长递增子序列
Time Limit: 1000 MS Memory Limit: 32768 K
Total Submit: 158(64 users) Total Accepted: 68(56 users) Rating: Special Judge: No
Description

给出一个数字序列求其最长的递增子序列例如序列(1,7,3,5,9,4,8).

(1,7)和(3,4,8)是其递增子序列但其最长的递增子序列是(1,3,5,8)。


Input

本题有多组测试数据,对于每组测试数据第一行是一个整数n(n<=100)代表序列长度。

第二行是n个整数。

Output
最长递增子序列长度
Sample Input

7

1 7 3 5 9 4 8

Sample Output
4

对于这个题目,我只能说是水题。但是有点坑!!

我使用了两种方法解决这个题目 :

1.DP

2.二分法


我一开始也不知道还能使用二分法,但是通过后面学习和细心被别人指导,发现这个可以使用二分法的


对于DP的解决是,

dp[i] = MAX(dp[i],dp[j]+1)  前提条件是  arr[i] > arr[j]

代码如下:

最长递增子序列!!!(DP ,二分)_第1张图片


后来我花了点时间,在使用二分法解决这个问题 :

二分法的思想就是在插入的时候要使用二分查找,看能插入到哪里,时间复杂度为 o(nlog(n))

时间也很小了 

代码如下 :

最长递增子序列!!!(DP ,二分)_第2张图片


由于二分法是我想出来的,所以我没有进行过特别变态的数据,以后我要是能发现比我这个还要好的,我就把他的那个学习一下。




你可能感兴趣的:(算题OJ)