动态规划之最长公共上升子序列(LCIS)算法及优化
例题
题目传送门
描述 给定两个整数序列,写一个程序求它们的最长上升公共子序列。 当以下条件满足的时候,我们将长度为N的序列S1 , S2 , . . . , SN 称为长度为M的序列A1 , A2 , . . . , AM 的上升子序列:存在 1 0};
int tmp=0;
for (int i=0;i
dp[i+1][j+1]=dp[i][j+1];
if(a[i]==b[j])
{
tmp=0;
for(int k=0;k
int ans=0;
int dp[505][505]={0};
for(int i=0;i
dp[i+1][j+1]=dp[i][j+1];
if(a[i]>b[j]&&tmp
int ans=0;
int dp[2][505]={0};
for(int i=0;i
dp[(i+1)%2][j+1]=dp[i%2][j+1];
if(a[i]>b[j]&&tmp
cin>>n;
for(int i=1;i>a[i];
cin>>m;
for(int i=1;i>b[i];
int pos=0,tmp;
for(int i=1;i
if(a[i]>b[j]&&dp[j]>dp[tmp]) tmp=j;
if(a[i]==b[j])
{
dp[j]=dp[tmp] + 1;
p[j]=tmp;
}
}
}
for(int i=1;i
int val=0;
vectorv;
};
int main()
{
int a[501],b[501];
Node dp[501];
int m,n;
cin>>m;
for(int i=1;i>a[i];
cin>>n;
for(int i=1;i>b[i];
for (int i=1;i
if(b[i]>a[j]&&dp[j].val>Max.val) Max=dp[j];
if (b[i]==a[j])
{
dp[j].val=Max.val+1;
dp[j].v=Max.v;
dp[j].v.push_back(b[i]);
}
}
}
Node Max=dp[1];
for (int i=2;i |