クルトンのプログラミング教室

Pythonの使い方やPythonを使った競技プログラミングの解法などを解説しています。

Pythonで理解する蟻本「2-3 最長共通部分列問題」(p.56)

この記事は「プログラミングコンテストチャレンジブック第2版」(蟻本)の
「2-3 最長共通部分列問題」(p.56)
のコードをPythonで書き直したものとなっています。

入力

n\,m\\s\\t

入力例



4 4
abcd
becd


解答

MAX_N = 1000
MAX_M = 1000

# 入力
n, m = map(int,input().split())
s = input()
t = input()

dp = [[0] * (MAX_M + 1) for _ in range(MAX_N + 1)]    # DPテーブル

for i in range(n):
    for j in range(m):
        if s[i] == t[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(dp[n][m])