http://poj.org/problem?id=3356
此题是求将x字符串变成y字符串需要最少的操作
<1>deletion:删除x中的一个字符;
<2>insertion:相当于删除y中的一个字符
<3>change:将一个字符改变为令一个字符
一般会想到用求出最长公共子序列的字符数num,再用最长的字符串数 - num, 但是这是不对的,即使能AC。比如AGT和GTC,结果是2,而用最长公共子序列为2,结果则为1;因此要按题目意思
f[i][j]表示,a的前i个基因序列和b的前j个基因序列需要的最少操作数
如果不相同则
<1> d1 = dp[i-1][j] + 1;
<2> d2 = dp[i][j-1] + 1;
<3> d3 = dp[i-1][j-1] + 1;
dp[i][j] = min(d1,d2,d3);
相同则dp[i][j] = dp[i-1][j-1];
与正常的dp相差不大。
初始化即看作其本身与空字符串匹配
for i 0 ~ n
dp[0][i] = i;
dp[i][0] = i;
<script src="https://code.csdn.net/snippets/455544.js"></script>