首页 > 代码库 > 最长递增公共子序列
最长递增公共子序列
#include <stdio.h> #include <algorithm> #include <string.h> using namespace std; int n,m,a[505],b[505],dp[505][505]; int LICS() { int MAX,i,j; memset(dp,0,sizeof(dp)); for(i = 1; i<=n; i++) { MAX = 0; for(j = 1; j<=m; j++) { dp[i][j] = dp[i-1][j]; if(a[i]>b[j] && MAX<dp[i-1][j]) MAX = dp[i-1][j]; if(a[i]==b[j]) dp[i][j] = MAX+1; } } MAX = 0; for(i = 1; i<=m; i++) if(MAX<dp[n][i]) MAX = dp[n][i]; return MAX; }
优化成一维
#include <stdio.h> #include <string.h> #include <algorithm> using namespace std; int a[505],b[505],dp[505],n,m; int LICS() { int i,j,MAX; memset(dp,0,sizeof(dp)); for(i = 1; i<=n; i++) { MAX = 0; for(j = 1; j<=m; j++) { if(a[i]>b[j] && MAX<dp[j]) MAX = dp[j]; if(a[i]==b[j]) dp[j] = MAX+1; } } MAX = 0; for(i = 1; i<=m; i++) if(MAX<dp[i]) MAX = dp[i]; return MAX; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。