题目很简单,多一个记录。。。。
忘了一个等于号,害我弄了大概一个小时。。。
郁闷了,考虑真不全面。。
代码如下:
Code
#include<stdio.h>
#include<string.h>
char a[105][35],b[105][35];
char result[105][35];
int opt[105][105],best[105][105];
int lena,lenb;
void init()
{
int i,j;
for(i=0;i<105;i++)
best[i][0]=best[0][i]=0;
}
int input()
{
lena=lenb=0;
if(scanf("%s",a[1])==EOF)
return 0;
else{
lena=1;
while(scanf("%s",a[++lena]),strcmp(a[lena],"#"))
;
lena--;
while(scanf("%s",b[++lenb]),strcmp(b[lenb],"#"))
;
lenb--;
}
return 1;
}
void output()
{
int i,j;i=lena;j=lenb;
while(best[i][j]){
if(opt[i][j]==0){
strcpy(result[(best[i][j])],a[i]);
i--;j--;
}
else if(opt[i][j]==-1)
i--;
else if(opt[i][j]==1)
j--;
}
for(i=1;i<best[lena][lenb];i++)
printf("%s ",result[i]);
printf("%s\n",result[(best[lena][lenb])]);
}
void process()
{
int i,j;
for(i=1;i<=lena;i++)
for(j=1;j<=lenb;j++){
if(strcmp(a[i],b[j])==0){
best[i][j]=best[i-1][j-1]+1;
opt[i][j]=0;
}
else if(best[i-1][j]>=best[i][j-1]){
best[i][j]=best[i-1][j];
opt[i][j]=-1;
}
else if(best[i][j-1]>best[i-1][j]){
best[i][j]=best[i][j-1];
opt[i][j]=1;
}
}
}
int main()
{
init();
while(input()){
process();
output();
}
return 1;
}
#include<stdio.h>
#include<string.h>
char a[105][35],b[105][35];
char result[105][35];
int opt[105][105],best[105][105];
int lena,lenb;
void init()
{
int i,j;
for(i=0;i<105;i++)
best[i][0]=best[0][i]=0;
}
int input()
{
lena=lenb=0;
if(scanf("%s",a[1])==EOF)
return 0;
else{
lena=1;
while(scanf("%s",a[++lena]),strcmp(a[lena],"#"))
;
lena--;
while(scanf("%s",b[++lenb]),strcmp(b[lenb],"#"))
;
lenb--;
}
return 1;
}
void output()
{
int i,j;i=lena;j=lenb;
while(best[i][j]){
if(opt[i][j]==0){
strcpy(result[(best[i][j])],a[i]);
i--;j--;
}
else if(opt[i][j]==-1)
i--;
else if(opt[i][j]==1)
j--;
}
for(i=1;i<best[lena][lenb];i++)
printf("%s ",result[i]);
printf("%s\n",result[(best[lena][lenb])]);
}
void process()
{
int i,j;
for(i=1;i<=lena;i++)
for(j=1;j<=lenb;j++){
if(strcmp(a[i],b[j])==0){
best[i][j]=best[i-1][j-1]+1;
opt[i][j]=0;
}
else if(best[i-1][j]>=best[i][j-1]){
best[i][j]=best[i-1][j];
opt[i][j]=-1;
}
else if(best[i][j-1]>best[i-1][j]){
best[i][j]=best[i][j-1];
opt[i][j]=1;
}
}
}
int main()
{
init();
while(input()){
process();
output();
}
return 1;
}