UVA - 531 Compromise

来源:互联网 发布:iscroll.js中文官网 编辑:程序博客网 时间:2024/06/16 07:23

LCS  不解释。。打印方案的地方没想清楚,花了点时间。。。

#include<cstdio>#include<cstring>#include<algorithm>#define MAX 110#define MAX1 50using namespace std;char s1[MAX][MAX1],s2[MAX][MAX1];int dp[MAX][MAX],father[MAX][MAX][2],flag;void print(int x,int y){    if(x==0||y==0)        return ;    print(father[x][y][0],father[x][y][1]);    if(strcmp(s1[x],s2[y])==0)    {        if(flag)            printf(" ");        flag++;        printf("%s",s1[x]);    }}int main(){    int i=1,j=1,t,k,m;    while(scanf("%s",s1[i++])!=EOF)    {        while(scanf("%s",s1[i++])&&s1[i-1][0]!='#');        while(scanf("%s",s2[j++])&&s2[j-1][0]!='#');        memset(dp,0,MAX*MAX*4);        memset(father,0,MAX*MAX*4*2);        flag=0;        for(t=1;t<i-1;t++)        {            for(k=1;k<j-1;k++)            {                if(strcmp(s1[t],s2[k])==0)                {                    dp[t][k]=dp[t-1][k-1]+1;                    father[t][k][0]=t-1,father[t][k][1]=k-1;                }                else                {                    if(dp[t-1][k]>dp[t][k-1])                    {                        dp[t][k]=dp[t-1][k];                        father[t][k][0]=t-1,father[t][k][1]=k;                    }                    else                    {                        dp[t][k]=dp[t][k-1];                        father[t][k][0]=t,father[t][k][1]=k-1;                    }                }            }        }        k=m=1;        print(i-2,j-2);        //printf("%d",dp[i-2][j-2]);        /*for(t=1;t<=dp[i-2][j-2];t++)        {            for(;k<i-1;k++)            {                for(;m<j-1;m++)                {                    if(dp[k][m]==t)                    {                        //printf("a");                        if(flag)                            printf(" ");                        flag++;                        printf("%s",s1[k]);                        k++,m++;                        goto next;                    }                }            }            next:{}        }*/        //if(dp[i-2][j-2])        printf("\n");        i=j=1;    }    return 0;}


0 0
原创粉丝点击