【发布时间】:2018-11-20 06:01:42
【问题描述】:
我正在研究一个动态规划问题(最长公共子序列)
我的问题:构建矩阵。
我最初使用 dp1 构建矩阵。但它不断产生错误的答案。然后我参考了其他答案并使用了 dp2,它产生了正确的答案。
例如:
s1 = ELGGYJWKTDHLXJRBJLRYEJWVSUFZKYHOIKBGTVUTTOCGMLEXWDSXEBKRZTQUVCJNGKKRMUUBACVOEQKBFFYBUQEMYNENKYYGUZSP
s2 = FRVIFOVJYQLVZMFBNRUTIYFBMFFFRZVBYINXLDDSVMPWSQGJZYTKMZIPEGMVOUQBKYEWEYVOLSHCMHPAZYTENRNONTJWDANAMFRX
正确答案应该是 27。
- dp1 给 30
- dp2 给出 27
我很困惑。有什么不同? “for _ in range(m+1)”本质上不是将之前的内容迭代 m+1 次吗?请帮帮我。
def commonChild(s1, s2):
n, m = len(s1), len(s2)
dp1 = [[0] * (n+1)] * (m+1)
dp2 = [[0] * (n+1) for _ in range(m+1)]
for i in range(m):
for j in range(n):
if s2[i] == s1[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])
return dp[-1][-1]
【问题讨论】:
标签: python dynamic-programming