比赛 20090916练习赛 评测结果 AAAAAAAAAA
题目名称 字符串的距离 最终得分 100
用户昵称 Launcher 运行时间 0.295 s
代码语言 C++ 内存使用 98.52 MiB
提交时间 2013-11-07 20:02:13
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<string>
using namespace std;
int f[5000][5000]={0};
int n,m;
char a[2002]={0},b[2002]={0};
int abss(int x)
{
	if (x>=0) 
		return x;
	else 
		return -x;
}

int Min(int x,int y)
{
	if (x<y) 
		return x;
	else 
		return y;
}
int main()
{
	freopen("blast.in","r",stdin);
	freopen("blast.out","w",stdout);
	
	int i,j,k,l;
	string s;
	getline(cin,s);
	n=s.length();
	for (i=0;i<n;i++)
		a[i+1]=s[i];
	getline(cin,s);
	m=s.length();
	for (i=0;i<m;i++)
		b[i+1]=s[i];
	cin>>l;
	f[1][1]=abss(a[1]-b[1]);
	f[1][1]=Min(f[1][1],2*l);
	for (i=2;i<=n;i++)
	{
		f[i][1]=Min(f[i-1][1]+l,l*i-l+abss(a[i]-b[1]));
	}
	for (i=2;i<=m;i++)
	{
		f[1][i]=Min(f[1][i-1]+l,l*i-l+abss(b[i]-a[1]));
	}
	for (i=2;i<=n;i++)
		for (j=2;j<=m;j++)
		{
			f[i][j]=Min(f[i-1][j]+l,f[i][j-1]+l);
			f[i][j]=Min(f[i][j],f[i-1][j-1]+abss(a[i]-b[j]));
		}
	/*for (i=1;i<=n;i++)
	{
		for (j=1;j<=m;j++)
		
			cout<<f[i][j]<<' ';
		cout<<endl;
		}*/
	cout<<f[n][m]<<endl;
	return 0;
}