最长公共子序列(LCS)tzoj:5752

http://www.tzcoder.cn/acmhome/problemdetail.do?method=showdetail&id=5752

题意:求两个串的最长公共子序列(顺序相同即为子序列)

dp[i+1][j+1]:表示0-i前i+1个为止的最长公共子序列

当a[i]==b[j]时,直接就是dp[i][j]+1;

其他:max(dp[i][j+1],dp[i+1][j])

 

#include<bits/stdc++.h>
using namespace std;
int dp[1005][1005];
char a[1005],b[1005];
int main()
{
    int i,j,n,m;
    scanf("%s%s",a,b);
    int la=strlen(a),lb=strlen(b);
    for(i=0;i<la;i++){
        for(j=0;j<lb;j++){
            if(a[i]==b[j])dp[i+1][j+1]=dp[i][j]+1;
            else dp[i+1][j+1]=max(dp[i][j+1],dp[i+1][j]);
        }
    }
    printf("%d\n",dp[la][lb]);
}

 

posted @ 2020-06-08 16:45  -第4题-  阅读(150)  评论(0编辑  收藏  举报