公共最大字串长度

无题:要求输出最大公共字串长度和执行次数。将来还要输出,,,最大字串。

输入案例:

7 6
ABCBDAB
BDCABA
4 4
ABCD
ABCD
4 5
ABCD
ACBCC

输出答案:

4

4

3

代码写的很笨,先记着怎么写等用到时在仔细研究吧 。

基本思路就是这个表: 

y  x

 

A

B

C

B

D

A

B

 

0

0

0

0

0

0

0

0

B

0

0

1

1

1

1

1

1

D

0

0

1

1

1

2

2

2

C

0

0

1

2

2

2

2

2

A

0

1

1

2

2

2

3

3

B

0

1

2

2

3

3

3

4

A

0

1

2

2

3

3

4

4


有斜杠的表示加一的操作。

my answer:

#include<iostream>
#include<cstring>
#include<stdio.h>
#include<string>
#include<cmath>
using namespace std;
int main()
{
    int m,n;
    while(cin>>m>>n)
    {
        getchar();
       /* char a[]={'0','A','B','C','B','D','A','B'};
        char b[]={'0','B','D','C','A','B','A'};*/
        char a[100],b[100],t;
        int i,j;
        for( i=1;i<=m;i++){
           cin>>t;
           a[i]=t;
       }
       a[i]='\0';
       for( j=1;j<=n;j++){
       	   cin>>t;
       	   b[j]=t;
       }
       b[j]='\0';
        int c[100][100];
        int count=0;
        for( j=0;j<=n;j++){
            for( i=0;i<=m;i++){
            	count++;
                if(i==0||j==0)c[i][j]=0;
                else if(a[i]==b[j]){
                    c[i][j]=c[i-1][j-1]+1;
                }
                else{
                    c[i][j]=max(c[i-1][j],c[i][j-1]);
                }
                if(i==m&&j==n){cout<<c[i][j]<<endl;cout<<count<<endl;}
            }
        }
    }
    return 0;
}



posted @ 2014-12-10 20:28  NYNU_ACM  阅读(202)  评论(0编辑  收藏  举报