1 条题解
-
0
C++ :
#include <iostream> #include <cmath> #define MAX 100000 //标识最大的可能整数 int val[300][300]; std::string stra; //字符串A std::string strb; //字符串B int k; //定值k //返回字符a与b的ASCII码的差的绝对值 int dist(char a, char b) { return abs(a-b); } int comp() { int len1, len2; int tmp; val[0][0] = 0; len1 = stra.length(); len2 = strb.length(); for(int i=0; i<=len1; i++) //字符串A和B的有效下标是º1~len,下标0表示空字符串 { //i或j是0表示A或B串为空串 for(int j=0; j<=len2; j++) { if(i+j)//i和j至少一个大于0 { val[i][j] = MAX; tmp = val[i-1][j] + k; if(i && (tmp<val[i][j]))//i大于0 val[i][j] = tmp; tmp = val[i][j-1]+k; if(j && (tmp<val[i][j]))//j大于0 val[i][j] = tmp; tmp = val[i-1][j-1] + dist(stra[i], strb[j]); if((i*j) && (tmp<val[i][j])) //i和j至少有一个不为0 val[i][j] = tmp; } } } return val[len1][len2]; } int main() { std::cin>>stra>>strb>>k; stra = " " + stra; //此处在字符串开头添加一个空格,是为了使字符串stra strb = " " + strb; //的控制台输入的有效字符下标从1到stra.length() std::cout<<comp()<<std::endl; // system("pause"); return 0; }
- 1
信息
- ID
- 3257
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者