Baekjoon 9251.py [LCS]
もし問題があったら?
今の文字が同じなら、すぐに昔の
疑問符位置には、赤い四角形の最大値+1が含まれます.
これを使用すると、indexは0,0から常に
説明する
import sys
input = sys.stdin.readline
w1 = input().rstrip()
w2 = input().rstrip()
lenOfw1 = len(w1)
lenOfw2 = len(w2)
dp = [[0]*(lenOfw2+2) for _ in range(lenOfw1+2)]
result = 0
for i in range(2, lenOfw1+2):
for j in range(2, lenOfw2+2):
dp[i-1][j-1] = max(dp[i-2][j-2], dp[i-1][j-2], dp[i-2][j-1], dp[i-1][j-1])
if w1[i-2] == w2[j-2]:
dp[i][j] = dp[i-1][j-1] + 1
result = max(dp[i][j], result)
print(result)
ふくガス
今の文字が同じなら、すぐに昔の
dp + 1
の論理を思い出しました.しかし、以前の文字ではなく、以前の文字に同じ文字がある場合は、当時のdp + 1
を現在のdp
に保存するので、この方法を実現するには長い時間がかかる.疑問符位置には、赤い四角形の最大値+1が含まれます.
dp[i-1][j-1] = max(dp[i-2][j-2], dp[i-1][j-2], dp[i-2][j-1], dp[i-1][j-1])
として保存されます.これを使用すると、indexは0,0から常に
dp[i-1][j-1]
に最値を格納しているため、現在dp[i][j] = dp[i-1][j-1]+1
は最値のみを格納している.Reference
この問題について(Baekjoon 9251.py [LCS]), 我々は、より多くの情報をここで見つけました https://velog.io/@hohooodo/Baekjoon-9251.py-LCSテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol