NYOJ动态规划最长公共子序列+二位数组递推dp

来源:互联网 发布:帝国cms修改栏目目录 编辑:程序博客网 时间:2024/06/05 11:18
点击打开链接
#include<stdio.h>#include<stdlib.h>#include<string.h>#include<iostream>using namespace std;int Maxlen[1005][1005];int main(){    int N=0,len1=0,len2=0,i=0,j=0;    char s1[1005]={'\0'},s2[1005]={'\0'};    scanf("%d",&N);    while(N--)    {        memset(s1,'\0',sizeof(s1));        memset(s2,'\0',sizeof(s2));        scanf("%s",s1+1);        scanf("%s",s2+1);        len1=strlen(s1+1);        len2=strlen(s2+1);        for(i=0;i<=len1;i++)            Maxlen[i][0]=0;        for(j=0;j<=len2;j++)            Maxlen[0][j]=0;        for(i=1;i<=len1;i++)        {            for(j=1;j<=len2;j++)            {                if(s1[i]==s2[j])                {                    Maxlen[i][j]=Maxlen[i-1][j-1]+1;//二维数组的动态规划                }                else                {                    if(Maxlen[i-1][j]>Maxlen[i][j-1])                        Maxlen[i][j]=Maxlen[i-1][j];                    else                        Maxlen[i][j]=Maxlen[i][j-1];                }            }        }        printf("%d\n",Maxlen[len1][len2]);    }    return 0;}

0 0
原创粉丝点击