0
点赞
收藏
分享

微信扫一扫

【动态规划】最长上升子序列(序列问题)

Alex富贵 2022-03-11 阅读 51

给定一个无序的整数数组,找到其中最长上升子序列长度。

  • 明确dp含义:dp[i] 表示以 nums[i] 这个数结尾的最长递增子序列的长度
  • 明确选择:假设 dp[0...i-1] 都已经被算出来了,然后问自己:怎么通过这些结果算出 dp[i](数学归纳思想)
  • 明确 base casedp[i] 初始值为 1,因为以 nums[i] 结尾的最长递增子序列起码要包含它自己
#include<iostream>
#include<algorithm>
using namespace std;
const int maxn = 110;
int main() {
	int n, A[maxn] = { 0 };
	int dp[maxn];
	fill(dp, dp + maxn, 1);
	cin >> n;
	for (int i = 0; i < n; i++) {
		cin >> A[i];
	}
	for (int i = 1; i < n; i++) {
		for (int j = 0; j < i; j++) {
			if (A[i] > A[j])
				dp[i] = max(dp[i], dp[j] + 1);
		}
	}
	int maxd = -1;
	for (int i = 0; i < n; i++) {
		maxd = max(maxd, dp[i]);
	}
	cout << maxd;
	system("pause");
	return 0;
}
举报

相关推荐

0 条评论