带权值的最长公共子序列。
原本s1[i] == s2[j]时dp[i][j] = dp[i - 1][j - 1] + 1,现在变为dp[i][j] = dp[i - 1][j - 1] + Map[s1[i]][s2[j]]。
原本s1[i] != s2[j]时dp[i][j] = max(dp[i][j - 1],dp[i - 1][j] ),现在变为dp[i][j] = max(dp[i][j - 1] + Map['-'][s2[j]],dp[i - 1][j] + Map[s1[i]]['-'])。
而且既然都加上权值,就可以放在一起比较。同样初始化也要加权值。
还有打表注意的技巧,何必将字母变为数字?多麻烦。直接用字母表示下标就好了~
#include <stdio.h>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 105;
const int INF = 1<<27;