您的位置:首页 > 其它

poj 3356 AGTC

2012-10-22 01:14 211 查看
本题的意思和我们学校OJ上的编辑距离是一样的,只不过是一个中文,一个英文罢了。

有3中操作,删除,插入,替换。属于字符串匹配的DP问题。

如果a[i]==b[j],dp[i][j]=dp[i-1][j-1];

否则的话,状态转移方程就是
dp[i][j]=min(dp[i-1][j]+1,min(dp[i][j-1]+1,dp[i-1][j-1]+1));


另外写的时候一定要注意初始化的问题。

-------------------------------------------------

#include <iostream>
#include <cstring>
#include <cmath>
using namespace std;
int dp[1000+10][1000+10];
int main()
{
string a,b;
int i,j,al,bl,ll;
int t;
while(cin>>al>>a>>bl>>b)
{
ll=max(al,bl);
for(i=0; i<=al; ++i)
for(j=0; j<=bl; ++j)
dp[i][j]=0;
for(i=1; i<=al; ++i)
dp[i][0]=dp[i-1][0]+1;
for(j=1; j<=bl; ++j)
dp[0][j]=dp[0][j-1]+1;
for(i=1; i<=al; ++i)
for(j=1; j<=bl; ++j)
{
if(a[i-1]==b[j-1]) dp[i][j]=dp[i-1][j-1];
else dp[i][j]=min(dp[i-1][j]+1,min(dp[i][j-1]+1,dp[i-1][j-1]+1));
}
cout<<dp[al][bl]<<endl;

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