您的位置:首页 > 其它

acm--pku--1458

2011-05-17 13:11 246 查看
问题描述:

  问题地址:http://poj.org/problem?id=1458

  查看两个字符串相同子窜的最长长度。

  举例子:

Sample Input

abcfbc         abfcab
programming    contest
abcd           mnp

Sample Output

4
2
0

从这个例子中可以看出用简单的动态规划就可以了。状态转移的式子是

if(node1[i-1]==node2[j-1])

{

sum[i][j]=sum[i-1][j-1]+1;

}

else

       {   

if(sum[i][j-1]>sum[i-1][j])

sum[i][j]=sum[i][j-1];

    else                 

sum[i][j]=sum[i-1][j];

}

全部代码为:

  #include<iostream>

#include<string.h>

using namespace std;

int main()

{

int sum[210][210];

char node1[210];

char node2[210];

int m,n;

int i,j,k;

while(cin>>node1>>node2)

  {    

//scanf("%s",node1);

// scanf("%s",node2);

// if(node1==""&&node2=="")

// break;

i=0;

while(node1[i]!='\0')i++;

m=i;

 i=0;

while(node2[i]!='\0')i++;

n=i;

for(i=0;i<=n;i++)

sum[0][i]=0;

for(i=0;i<=m;i++)

sum[i][0]=0;

for(i=1;i<=m;i++)

{      

for(j=1;j<=n;j++)

 {  

if(node1[i-1]==node2[j-1])

     {      

sum[i][j]=sum[i-1][j-1]+1;

  }        

else

{       

if(sum[i][j-1]>sum[i-1][j])

sum[i][j]=sum[i][j-1];

else   

sum[i][j]=sum[i-1][j];    

}

}

}

// printf("%d\n",sum[m]
);

cout<<sum[m]
<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: