最长上升子序列问题求的是形如一个数列a={4,2,3,1,5},那么这个数列的最长上升子序列就是{2,3,5}
求解这种问题有两种方法,第一种是求当前元素之前元素的最长上升子序列,得到递推公式dp[i]=max(1,dp[j]+1)意思是仅当前元素或者前一元素递推得到的最长上升子序列+当前元素,第二种是求相等长度的上升子序列,最后一个元素越小,则该子序列的“上升潜力”越大。
方法一:
int dp[maxn];
int num[maxn];
int slove()
{
int res=0;
for(int i=0;i<n;i++)
{dp[i]=1;
for(int j=0;j<i;j++)
if(num[i]>num[j])
dp=max(dp[i],dp[j]+1);
res=max(dp[i],res);
}
return res;
}
方法二:
int dp[maxn];
int num[maxn];
int INF=0x3f3f3f3f;
int solve()
{
memset(dp,INF,dp+n);
for(int i=0;i<n;i++)
*lower_boun