zoukankan      html  css  js  c++  java
  • POJ 2250 Compromise(最长公共子序列)

    题意:求两段文本的最长公共文本;

    思路:最长公共子序列+打印公共序列;

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    int dp[505][505],num1,num2;
    char s[505][505],s1[505][505],s2[505][505];
    void lcs(int a,int b)
    {
        if(a==0||b==0) return;
        if(s[a][b]==0)
        {
            lcs(a-1,b-1);printf("%s ",s1[a]);
        }
        else if(s[a][b]==-1)
        {
            lcs(a-1,b);
        }
        else
        {
            lcs(a,b-1);
        }
    }
    int main()
    {
        int i,j,k;
        while(scanf("%s",s1[1])!=EOF)
        {
            num1=2,num2=1;
            memset(s,0,sizeof(s));
            memset(dp,0,sizeof(dp));
            while(scanf("%s",s1[num1])&&s1[num1][0]!='#') num1++;
            while(scanf("%s",s2[num2])&&s2[num2][0]!='#') num2++;
            for(i=1;i<num1;i++)
            {
                for(j=1;j<num2;j++)
                {
                    if(!strcmp(s1[i],s2[j]))
                    {
                        dp[i][j]=dp[i-1][j-1]+1;s[i][j]=0;
                    }
                    else
                    {
                        if(dp[i][j-1]>dp[i-1][j])
                        {
                            dp[i][j]=dp[i][j-1];s[i][j]=1;
                        }
                        else
                        {
                            dp[i][j]=dp[i-1][j];s[i][j]=-1;
                        }
                    }
    
                }
            }
            lcs(num1-1,num2-1);
            printf("
    ");
        }
        return 0;
    }
  • 相关阅读:
    申请加分项
    课程评价
    本周总结
    热词2
    热词1
    php大作业
    css网格布局
    php实验4
    本周总结
    css边框图像
  • 原文地址:https://www.cnblogs.com/dashuzhilin/p/4523436.html
Copyright © 2011-2022 走看看