POJ2250:Compromise(LCS)

来源:互联网 发布:bt下载器 mac 编辑:程序博客网 时间:2024/04/28 10:35

题意:

  求最多的相同的单词,单词顺序是不变的,就是求出最长的公共单词串。

思路:

  LCS。

代码:

#include<stdio.h>#include<string.h>char str1[105][32],str2[105][32];int Y;struct  Node1{    int pre;    int x;} map[105][105];struct Node2{    int x,y;} d[105];void LCS(int len1,int len2){    for(int i=1; i<=len1; i++)        for(int j=1; j<=len2; j++)        {            if(strcmp(str1[i-1],str2[j-1])==0)            {                map[i][j].x=map[i-1][j-1].x+1;                map[i][j].pre=2;            }            else if(map[i][j-1].x>map[i-1][j].x)            {                map[i][j].x=map[i][j-1].x;                map[i][j].pre=3;            }            else            {                map[i][j].x=map[i-1][j].x;                map[i][j].pre=1;            }        }}void digui(int i,int j,int cur){    if(i==0||j==0)    {        d[cur].x=i;        d[cur].y=j;        Y=cur;        return ;    }    if(map[i][j].pre==1)    {        d[cur].x=i;        d[cur].y=j;        digui(i-1,j,cur+1);    }    else if(map[i][j].pre==2)    {        d[cur].x=i;        d[cur].y=j;        digui(i-1,j-1,cur+1);    }    else if(map[i][j].pre==3)    {        d[cur].x=i;        d[cur].y=j;        digui(i,j-1,cur+1);    }}int main(){    while(scanf("%s",str1[0])!=EOF)    {        int i=1,len1,len2;        while(scanf("%s",str1[i])!=EOF)        {            if(str1[i][0]=='#')            {                len1=i;                break;            }            i++;        }        i=0;        while(scanf("%s",str2[i])!=EOF)        {            if(str2[i][0]=='#')            {                len2=i;                break;            }            i++;        }        for(i=0; i<=len1; i++)            map[0][i].x=0;        for(i=0; i<=len2; i++)            map[i][0].x=0;        LCS(len1,len2);        digui(len1,len2,0);        for(int i=Y-1; i>=0; i--)        {            if(map[d[i].x][d[i].y].x!=map[d[i+1].x][d[i+1].y].x)            {                printf("%s%c",str1[d[i].x-1],map[len1][len2].x==map[d[i].x][d[i].y].x?'\n':' ');            }        }    }}


0 0
原创粉丝点击