【題解】ZeroJudge a676: 00111 – History Grading

【題目敘述】https://zerojudge.tw/ShowProblem?problemid=a676

"""
注意輸入。輸入給的是編號從1~n號的事件是在哪時執行的順序。
例如:1 3 4 2 5並不是代表1號事件做完換3號事件,3號事件做完換4號事件這樣以此類推,而是代表1號事件會在順序中的第1個位置,2號事件會在順序中的第3個位置,3號事件會在順序中的第4個位置這樣以此類推。
"""
n = int(input())
target = None
while True:
    try:
        line = list(map(int, input().split()))
        line.insert(0, 0)
        ans = line[:]
        for i, l in enumerate(line):
            ans[l] = i
            
        if target is None:
            target = ans[:]
            continue
                   
        dp = [[0] * (n+1) for i in range(n+1)]

        for i in range(1, n+1):
            for j in range(1, n+1):
                if target[i]==ans[j]:
                    dp[i][j] = dp[i-1][j-1] + 1
                else:
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1])
        print(dp[n][n])
    except:
        break
分享本文 Share with friends