原题链接:https://leetcode-cn.com/problems/longest-increasing-subsequence/
思路是从后向前用动态规划,转移方程为
dp[i]=max(dp[i],(nums[i]<nums[j])?dp[j]+1:1)
代码:
int lengthOfLIS(vector<int>& nums) {
if(nums.empty()) return 0;
int len=nums.size();
int max=INT_MIN;
vector<int> dp(len,0);
for(int i=len-1;i>=0;i--){
for(int j=i;j<len;j++){
dp[i]=std::max(dp[i],(nums[i]<nums[j])?dp[j]+1:1);
}
max=std::max(max,dp[i]);
}
return max;
}
从前往后用动态规划也可以
dp[i]=max(dp[j])+1,其中0≤j<i且num[j]<num[i]