[アルゴリズム/標準]11054:最長のバイナリ部分数列(python)
maxで解くと、答えが出なくなります.
直前にLISを適用し、逆にLISを適用します.
そして二つを合わせればいいのですが….ひっくり返したインデックスは逆ですだから、もう一度裏返してやればいい.
N = int(input())
a = list(map(int, input().split()))
b = a[::-1]
dp = [1] * (N)
dp2 = [1] * (N)
for i in range(N):
for j in range(i):
if a[i] > a[j]:
dp[i] = max(dp[i], dp[j] + 1)
if b[i] > b[j]:
dp2[i] = max(dp2[i], dp2[j] + 1)
print(max([i+j for i, j in zip(dp, dp2[::-1])]) - 1)
Reference
この問題について([アルゴリズム/標準]11054:最長のバイナリ部分数列(python)), 我々は、より多くの情報をここで見つけました https://velog.io/@y7y1h13/알고리즘백준-11054-가장-긴-바이토닉-부분-수열pythonテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol