此题满足动态规划求解条件:1. 最优子结构性质 2. 重叠子问题性质
每个位置可能有三种情况:1. 第一个序列被插入‘_' 2. 第二个序列被插入'_' 3. 两个都不插入,直接匹配
最优值的递归定义为c[i][j] = max(c[i-1][j-1] + arr[sx[i]][sy[j]], c[i][j-1] + arr[4][sy[j]], c[i-1][j] + arr[sx[i]][4])
#include <iostream>
using namespace std;
int max(int a, int b, int c) {
int tmp = a > b? a : b;
return tmp > c ? tmp : c;
}
int main() {
int arr[5][5] = {
{5,-1,-2,-1,-3}, {-1,5,-3,-2,-4}, {-2,-3,5,-2,-2}, {-1,-2,-2,5,-1}, {-3,-4,-2,-1,0}};
int num;
cin >> num;
while(num--) {
// sx,sy分别存储两个序列字符对应的下标ÿ