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 @   楚千羽  阅读(29)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
历史上的今天:
2020-04-20 mathtype公式编辑器设置字母正体斜体的方法
点击右上角即可分享
微信分享提示