hdu 1159 common subsuquence

来源:互联网 发布:java项目经验范文 编辑:程序博客网 时间:2024/06/02 20:26

题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1159

#include <algorithm>#include<cstdio>#include<string>#include<iostream>#define MAXN 1000using namespace std;int dp[MAXN][MAXN];string x,y;int main(){    while(cin>>x>>y){    int ans=0;int k;    for(k=0;k<y.size();k++){if(x[0]==y[k])break;dp[0][k]=0;    }for(;k<y.size();k++){dp[0][k]=1;}    for(k=0;k<x.size();k++)    {        if(x[k]==y[0])break;        dp[k][0]=0;    }for(;k<x.size();k++){dp[k][0]=1;}    for(int i=1;i<x.size();i++)    {        for(int j=1;j<y.size();j++)        {            if(x[i]==y[j])dp[i][j]=dp[i-1][j-1]+1;            else if(x[i]!=y[j])            {                if(dp[i-1][j]>dp[i][j-1])                    dp[i][j]=dp[i-1][j];                else                    dp[i][j]=dp[i][j-1];            }            if(dp[i][j]>ans)                ans=dp[i][j];        }    }            printf("%d\n",ans);    }    return 0;}
LCS裸题……加动规思想

对于xi=yj时,dp[i][j]=dp[i-1][j-1]+1;

是为了防止出现重复计数,比如第一串是a,第二串是baaaa这种情况

原创粉丝点击