最长递增子序列
比较常见的,用动态规划解决的最长递增子序列问题,蓝桥杯有一道题(蓝桥骑士 - 蓝桥云课 (lanqiao.cn))是用 二分+贪心 对dp进行了优化。
给出dp版AC:
int lengthOfLIS(vector<int>& nums) {
vector<int>dp(nums.size()+1,1);
//dp[i]代表的是以nums[i]结尾的数的最大子序列长度,而不是总体的,所以需要一个 ans 来记录最大值
int ans=0;
for(int i=0;i<nums.size();i++)
{
for(int j=0;j<i;j++)
{
if(nums[i]>nums[j])
dp[i]=max(dp[i],dp[j]+1);
}
ans=max(ans,dp[i]);
}
return ans;
}