zoukankan      html  css  js  c++  java
  • poj 2250 Compromise (LCS)

    题目大意:给出两段文字,求出最长的公共单词串。


    直接是以前的代码改一点就A了。


    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    
    char s1[35][100],s2[35][100],s[35][100];
    int len1,len2,dp[105][105],mark[105][105],l;
    
    void LCS()
    {
        int i,j;
        memset(dp,0,sizeof(dp));
        for(i = 0;i<=len1;i++)
        mark[i][0] = 1;
        for(i = 0;i<=len2;i++)
        mark[0][i] = -1;
        for(i = 1; i<=len1; i++)
        {
            for(j = 1; j<=len2; j++)
            {
                if(!strcmp(s1[i-1],s2[j-1]))
                {
                    dp[i][j] = dp[i-1][j-1]+1;
                    mark[i][j] = 0;
                }
                else if(dp[i-1][j]>=dp[i][j-1])
                {
                    dp[i][j] = dp[i-1][j];
                    mark[i][j] = 1;
                }
                else
                {
                    dp[i][j] = dp[i][j-1];
                    mark[i][j] = -1;
                }
            }
        }
    }
    
    void PrintLCS(int i,int j)
    {
        if(!i && !j)
            return;
        if(mark[i][j]==0)
        {
            PrintLCS(i-1,j-1);
            strcpy(s[l++], s1[i-1]);
        }
        else if(mark[i][j]==1)//根据回溯的位置进行输出
        {
            PrintLCS(i-1,j);
        }
        else
        {
            PrintLCS(i,j-1);
        }
    }
    
    int main()
    {
        while(~scanf("%s",s1[1]))
        {
            len1=1;
            len2=0;
            while(strcmp(s1[len1], "#"))
                scanf("%s", s1[++len1]);
            while(strcmp(s2[len2], "#"))
                scanf("%s", s2[++len2]);
    
            l=0;
            LCS();
            PrintLCS(len1, len2);
    
            for(int i=1; i<l; ++i)
            {
                if(i==1)
                    printf("%s", s[i]);
                else
                    printf(" %s", s[i]);
            }
            printf("
    ");
        }
        return 0;
    }
    


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    通过 SSH 实现 TCP / IP 隧道(端口转发)
    解决 github 无法登录的问题
    微信平台开发
    微信小程序图表控件
    微信小程序网络排查指引
    python 垃圾回收
    javascript keycode大全
    excel数据批量转mysql 语句
    对 OpenCV 中 getRotationMatrix2D 函数和仿射变换的一点理解
    Aspose.Cells
  • 原文地址:https://www.cnblogs.com/wanglaoda/p/4937137.html
Copyright © 2011-2022 走看看