动态规划之最长公共上升子序列(LCIS)算法及优化&&Openjudge2000:最长公共子上升序列

您所在的位置:网站首页 am的m 动态规划之最长公共上升子序列(LCIS)算法及优化&&Openjudge2000:最长公共子上升序列

动态规划之最长公共上升子序列(LCIS)算法及优化&&Openjudge2000:最长公共子上升序列

2024-01-06 13:29| 来源: 网络整理| 查看: 265

动态规划之最长公共上升子序列(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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3