【模板】最长不下降子序列、最长上升子序列、最长公共子序列
C++版本:
最长不下降子序列
for (int i = n; i >= 1; i--) {
*upper_bound(dp2 + 1, dp2 + 1 + n, a[i]) = a[i];
}
最长上升子序列
for (int i = 1; i <= n; i++) {
*lower_bound(dp1 + 1, dp1 + 1 + n, a[i]) = a[i];
}
最长公共子序列
void LCS(int s1[], int s2[], int l) {
for (int i = 1; i <= l; i++)
for (int j = 1; j <= l; j++)
if (s1[i] == s2[j])dp[i][j] = dp[i - 1][j - 1] + 1;
else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
printf("%d\n", dp[n][n]);
}
关注我查看更多精华内容