动态规划学习的第一天

最长上升子序列:

dp = [1 for i in range(1007)]
n = eval(input())
a = list(map(int, input().split()))
for i in range(n):
for j in range(0, i):
if a[j] <= a[i]:
dp[i] = max(dp[i], dp[j] + 1)

print(max(dp))

最长公共子序列:

s1 = input()
s2 = input()
n = len(s1)
m = len(s2)
dp = [[0 for j in range(m + 1)] for i in range(n + 1)]
for i in range(n):
    for j in range(m):
        if s1[i] == s2[j]:
            dp[i + 1][j + 1] = dp[i][j] + 1
        else:
            dp[i + 1][j + 1] = max(dp[i][j + 1], dp[i + 1][j])

print(max(max(dp)))

猜你喜欢

转载自www.cnblogs.com/SwiftAC/p/12374569.html