poj1458(LCS)

来源:互联网 发布:手机pousheng邮箱端口 编辑:程序博客网 时间:2024/05/17 23:44

最最基础的最长公共子序列问题。
dp[i][j]表示状态是a串前i个和b串前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]

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;string a,b;int dp[550][550];int main(){    while(cin>>a>>b)    {        memset(dp,0,sizeof(dp));        int n=a.size();        int m=b.size();        for(int i=0;i<n;i++)        {            for(int j=0;j<m;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]);            }        }        cout<<dp[n][m]<<endl;    }}
0 0
原创粉丝点击