这是一个经典的LIS(即最长上升子序列)问题,请设计一个尽量优的解法求出序列的最长上升子序列的长度。
给定一个序列A及它的长度n(长度小于等于500),请返回LIS的长度。
测试样例:
[1,4,2,5,3],5
返回:3
class LongestIncreasingSubsequence {
public:
int getLIS(vector<int> A, int n) {
// write code here
vector<int> dp(n,1);
int ret=1;
for(int i=1;i<n;i++)
{
for(int j=0;j<i;j++)
{
if(A[j]<A[i])
dp[i]=max(dp[i],dp[j]+1);
}
if(dp[i]>ret)
ret=dp[i];
}
return ret;
}
};