HEU 1041 Compromise

/**************************************
Problem: HEU 1041 Compromise
Time: 0.0000 s
Memory: 560 k 
Accepted Time: 2009-04-13 20:27:14
Tips: 求最长公共子序列 
*************************************
*/

#include 
<stdio.h>
#include 
<string.h>
int main()
{
    
char a[150][40],b[150][40];
    
while(1)
    
{
        
int ca=1,cb=1,rat;
        
while(1)
        
{
            rat
=scanf("%s",a[ca]);
            
if(rat==EOF)return 0;
            
if(strcmp(a[ca],"#")==0)break;
            ca
++;
        }

        
while(1)
        
{
            rat
=scanf("%s",b[cb]);
            
if(rat==EOF)return 0;
            
if(strcmp(b[cb],"#")==0)break;
            cb
++;
        }

        ca
--;cb--;
        
int table[150][150],i,j;
        
for(i=0;i<=ca;i++)table[0][i]=0;
        
for(i=0;i<=cb;i++)table[i][0]=0;
        
char c[150][40];
        
int count=0;
        
for(i=1;i<=ca;i++)
        
{
            
for(j=1;j<=cb;j++)
            
{
                
if(strcmp(a[i],b[j])==0)table[i][j]=table[i-1][j-1]+1;
                
else if(table[i-1][j]>table[i][j-1])table[i][j]=table[i-1][j];
                
else table[i][j]=table[i][j-1];
            }

        }

        i
=ca;j=cb;
        
while(i!=0&&j!=0)
        
{
            
if(strcmp(a[i],b[j])==0)
            
{
                strcpy(c[count
++],a[i]);
                i
--;j--;
            }

            
else if(table[i-1][j]>table[i][j-1])i--;
            
else j--;
        }

        
for(i=count-1;i>0;i--)printf("%s ",c[i]);
        printf(
"%s\n",c[0]);
    }

}

posted @ 2009-04-13 20:42  主函数  阅读(192)  评论(0编辑  收藏  举报