【模板】最长不下降子序列、最长上升子序列、最长公共子序列

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]);
}

关注我查看更多精华内容

posted @ 2020-09-13 12:59  pjhui  阅读(161)  评论(0编辑  收藏  举报