白駿11053号「最も成長した部分数列」
3391 ワード
質問する
百準11053回成長最長の部分数列
に答える
'LIS'
動的計画法で解く.
列を順番に繰り返すには、現在の順序の数字を前の数字と比較して、現在の数字のk値(現在の数字が部分列に入ったときの順序)を変更します.
ex)arr=[10,20,10,30,20,50]の場合
i値が増加すると、k配列は次のようになります.
Pythonコード
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int, input().split()))
k = [1]*n
for i in range(1, n):
for j in range(i):
if arr[j] < arr[i]:
k[i] = max(k[i], k[j]+1)
print(max(k))
Reference
この問題について(白駿11053号「最も成長した部分数列」), 我々は、より多くの情報をここで見つけました https://velog.io/@kgpaper/백준-11053번-가장-긴-증가하는-부분-수열テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol