poj3356 AGTC

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
#include<algorithm>
using namespace std;
int num1;
int num2;
char str1[1010];
char str2[1010];
int d[1010][1010];
void init()
{
    int i,j;
    for(i=0;i<=num1;i++)
    {
        for(j=0;j<=num2;j++)
        {
            d[i][j]=-1;
        }
    }
}
int main()
{
    int i,j;
    while(scanf("%d %s",&num1,str1)!=EOF)
    {
        scanf("%d %s",&num2,str2);
        init();
        d[0][0]=0;
        for(i=1;i<=num1;i++)
        {
            d[i][0]=i;
        }
        for(i=1;i<=num2;i++)
        {
            d[0][i]=i;
        }
        for(i=1;i<=num1;i++)
        {
            for(j=1;j<=num2;j++)
            {
                if(str1[i-1]==str2[j-1])
                {
                    d[i][j]=d[i-1][j-1];
                }
                else
                {
                    d[i][j]=d[i-1][j-1]+1;
                    if(d[i][j]>d[i-1][j]+1)
                    {
                        d[i][j]=d[i-1][j]+1;
                    }
                    if(d[i][j]>d[i][j-1]+1)
                    {
                        d[i][j]=d[i][j-1]+1;
                    }
                }
            }
        }
        printf("%d\n",d[num1][num2]);
    }
    return 0;
}
posted @ 2012-08-06 23:05  willzhang  阅读(131)  评论(0编辑  收藏  举报