题意:
人类基因有两条,现在给出两个字符串,有长有短,可以在字符串中插入空格,要求对照表使两个字符串得出的相似值最大。
要点:
是LCS的变形,用dp[i][j]存储第一个字符串前i个字符与第二个字符串前j个字符的相似值的最大值,可以这么理解,要么就两个字符串都不加空格,要么其中一个加一个不加。这样可以写出状态转移方程为:dp[i][j]=max(dp[i - 1][j - 1] + matrix[val[a[i]]][val[b[j]]],dp[i - 1][j] + matrix[val[a[i]]][val['-']], dp[i][j - 1] + matrix[val['-']][val[b[j]]])。这题的边界条件不太一样,除了dp[0][0]=0以外,其他的:dp[0][i] = dp[0][i-1] + matrix[val['-']][val[b[i]]],dp[i][0] = dp[i-1][0] + matrix[val['-'] ][val[a[i]]]。可以这么理解,为0就是空格,也是有相似值的。
15656931 | | | Accepted | 272K | 16MS | | 1032B | 2016-07-03 16:39:17 |
#include #include #include #include #include