/*
* tyvj-1046
* mike-w
* 2012-10-30
* *********************************
* 10 days to NOIP2012
* *********************************
* 学习了一种新DP
* 问题的关键是空格的数目是不确定的
*/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXN 2222
#define INF 9999999
int K;
char s1[MAXN], s2[MAXN];
int opt[MAXN][MAXN];
int min2(int e1, int e2)
{
return e1<e2?e1:e2;
}
int min3(int e1, int e2, int e3)
{
return min2(e1, min2(e2, e3));
}
int main(void)
{
int i, j, len1, len2;
scanf("%s%s%d", s1+1, s2+1, &K);
s1[0]=s2[0]=' ';
len1=strlen(s1)-1;
len2=strlen(s2)-1;
for(i=1; i<=len1; i++)
for(j=1; j<=len2; j++)
opt[i][j]=INF;
/*
* suppose the first char of both strings is a space
* to simplify initialization
*/
for(i=1; i<=len1; i++)
opt[i][0]=i*K;
for(i=1; i<=len2; i++)
opt[0][i]=i*K;
for(i=1; i<=len1; i++)
for(j=1; j<=len2; j++)
opt[i][j]=min3(opt[i-1][j]+K, opt[i][j-1]+K, opt[i-1][j-1]+
abs(s1[i]-s2[j]));
printf("%d\n", opt[len1][len2]);
return 0;
}
TYVJ-1046 DP
最新推荐文章于 2018-08-30 23:24:57 发布