hdu 1159

来源:互联网 发布:c语言printf输出汉字 编辑:程序博客网 时间:2024/05/28 18:43

一道dp 的题,求两个字符串的最大公共子序列,第一次写,没有思路,看了别人的代码,感觉还是比较容易理解的。


题意:求两个字符串的最大公共子序列长度,可以不连续。


附上代码:

#include <iostream>#include <cstdio>#include <cstring>#define N 1001    //N不要取太多,超了一次内存using namespace std;char a[N],b[N];int dp[N][N];int max(int a,int b)   //取最大值{    return a>b?a:b;}int main(){    int n,m,i,j;    while(~scanf("%s%s",a,b))    {        n=strlen(a);   //取两个序列的长度        m=strlen(b);        memset(dp,0,sizeof(dp));        for(i=1; i<=n; i++)            for(j=1; j<=m; j++)            {                if(a[i-1]==b[j-1])                    dp[i][j]=dp[i-1][j-1]+1; //若相等,则在dp[i-1][j-1]基础上加1                else                    dp[i][j]=max(dp[i-1][j],dp[i][j-1]); //若不相等,则选择两个字符串中有相同公共子序列多个记录下来            }        printf("%d\n",dp[n][m]);    }    return 0;}


0 0