伯準11053号:成長が最も長い部分数列
伯準11053号:成長が最も長い部分数列
arr[i]が持つことができる最大長をd[i]に書き込む.最初のインデックスからi-1のインデックスに移動し、arr[i]値よりも長く、小さい要素を探します.
このように解くと,時間的複雑度はO(N^2)である.この方法では,入力サイズ1000000の12015題を解決できない.君はほかの方法を考えなければならない.
アイデア
arr[i]が持つことができる最大長をd[i]に書き込む.最初のインデックスからi-1のインデックスに移動し、arr[i]値よりも長く、小さい要素を探します.
コード#コード#
N = int(input())
arr = list(map(int, input().split()))
arr.insert(0, 0)
d = [0]*(N + 1)
for i in range(1, N + 1):
tmp = 0
for j in range(i):
if tmp < d[j] and arr[j] < arr[i]:
tmp = d[j]
d[i] = tmp + 1
print(max(d))
おしゃべり
このように解くと,時間的複雑度はO(N^2)である.この方法では,入力サイズ1000000の12015題を解決できない.君はほかの方法を考えなければならない.
Reference
この問題について(伯準11053号:成長が最も長い部分数列), 我々は、より多くの情報をここで見つけました https://velog.io/@ks1ksi/백준-11053번-가장-긴-증가하는-부분-수열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol