| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
DP问题,只是输出有点问题。。。,终AC,代码如下#include<stdio.h>
#include<string.h>
int max(int a,int b)
{
return (a>b ? a:b);
}
int d[110][110];
char s1[110][40],s2[110][40];
int p[110][110], pos[100];
int count;
void print(int i,int j)//
{
if (i == 0 && j == 0) return ;
if (p[i][j] == 1)
{
print(i-1,j-1);
pos[count++]=i;
}
else if (2 == p[i][j])
print(i,j - 1);
else if (3 == p[i][j])
print(i-1,j);
}
int main()
{
char s[40];
while(scanf("%s",s)!=EOF)
{
strcpy(s1[1],s);
int c1=1,c2=0;
while(true)
{
scanf("%s",s1[++c1]);
if(s1[c1][0]=='#') break;
}
getchar();
while(true)
{
scanf("%s",s2[++c2]);
if(s2[c2][0]=='#') break;
}
c1--;
c2--;
for(int i=0;i<=c1;i++) d[i][0]=0;
for(int i=1;i<=c2;i++) d[0][i]=0;
for(int i=1;i<=c1;i++)
for(int j=1;j<=c2;j++)
{
if(strcmp(s1[i],s2[j])==0)
{
d[i][j]=d[i-1][j-1]+1;
p[i][j]=1; ////////
}
else
{
d[i][j] = max(d[i-1][j],d[i][j-1]);
if(d[i-1][j]<d[i][j-1]) p[i][j]=2; ////////
else p[i][j]=3; ////////
}
}
memset(pos,0,sizeof(pos));
count=0;
print(c1,c2);
for(int i=0;i<count-1;i++) printf("%s ",s1[pos[i]]);
printf("%s\n",s1[pos[count-1]]);
}
return 0;
}
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator