C

来源:互联网 发布:win10平板装ubuntu 编辑:程序博客网 时间:2024/06/11 00:18

求最大公共子序列,类似记忆动态规划。

#include<iostream>#include<stdio.h>#include<cstring>#include<string>#include<stack>#include<queue>#include<functional>#include<set>#include<map>#include<cstdlib>#include<vector>#include<cmath>#include <algorithm>#pragma warning(disable:4996)using namespace std;char s1[1010],s2[1010];int dp[1010][1010];int main(){int n,i,j,len1,len2;while (~scanf("%s %s",s1,s2)){len1 = strlen(s1);len2 = strlen(s2);memset(dp, 0, sizeof(dp));if (len1 == 0 || len2 == 0){printf("0\n");continue;}for(i=1;i<=len1;i++)for (j = 1; j <= len2; j++){if (s1[i-1] == s2[j-1])dp[i][j] = dp[i - 1][j - 1] + 1;elsedp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}printf("%d\n", dp[i-1][j-1]);}return 0;}