2.1-最长递增子序列-动态规划解法

Reference

LeetCode 300. 最长递增子序列
牛客网. 最长递增子序列
labuladong的算法小抄
Markdown语法


Labuladong的算法小抄(纸质书籍 2021年1月第1版,2022年1月第七次印刷 第2章,第1节)

  • 勘误:第93页最下面的图里 dp[3] = 4 应改为dp[3] = 3

动态规划一般解法

找到“状态”和“选择”->明确dp数组/函数的定义->寻找状态之间的关系。

难点

  • dp数组的含义
  • 寻找正确的状态转移方程(数学归纳法)

代码解释详见 Labuladong的算法小抄 书箱(2022年1月第七次印刷) pp.96-100

def func():
	arr = list(map(int,input().strip().split()))

	if len(arr) == 1:
		return 1
	if len(arr) == 0:
		return 0

	lenn = len(arr)
	dp = [1]*lenn

	for i in range(lenn):
		for j in range(i):
			if arr[i] > arr[j]:
				dp[i] = max(dp[i],dp[j]+1)

	res = 0
	for i in range(lenn):
		res = max(res,dp[i])
	return res


if __name__ == '__main__':
	c = func()
	print(c)
posted @ 2022-04-20 23:41  楚千羽  阅读(26)  评论(0编辑  收藏  举报