文章
14
粉丝
230
获赞
26
访问
71.1k
最长递减子序列不唯一,题目的意思应该是输出从左往右第一个符合条件的序列
通过dp数组,可以得出最长递减子序列的长度
通过一个辅助数组记录“前驱”,就是当前dp值的来源
例
原序列 9 4 3 2 5 4 3 2
dp数组 1 2 3 4 2 3 4 5
pre数组 0 1 2 3 1 5 6 7
dp数组中5的来源是7,意思是5对应的数字2,其前一个数字应该是第7个数字(3),
3的前驱是第6个数字(4),
4的前驱是第5个数字(5),
5的前驱是第1个数字(9),
5的前驱是是0,代表到此结束
#include<bits/stdc++.h>
using namespace std;
int a[100001];
int dp[100001];
int pre[100001];
int num;
void getLcs()
{
int ans=0;
int res[100001];
for(int i=1; i<=num; i++)
{
dp[i]=1;
for(int j=1; j<i; j++)
{
if(a[j]>a[i]&&dp[j]+1>dp[i])
{
dp[i]=dp[j]+1;
pre[i]=j;
}
}
ans=max(ans,dp[i]);
}
int index=0;
for(int i=1; i<=num; i++)
{
if(dp[i]==ans)
index=i;
}
int cmt=ans;
for(int i=index; i!=0; i=pre[i])
res[cmt--]=a[i];
for(i...
登录后发布评论
暂无评论,来抢沙发