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)