Part7.4動的プログラミング最大インクリメンタル列


最大ローカル増分数列


先生コード
import sys
sys.stdin = open("input.txt", "rt")

n = int(input())
arr = list(map(int, input().split()))
arr.insert(0,0)

dy = [0]*(n+1)
dy[1] = 1 # 첫번째 숫자는 앞에 아무것도 없으므로
res = 0

for i in range(2, n+1):
   max = 0
   for j in range(i-1, 0, -1): # i 바로 앞에서 부터 1 까지 돈다
       if arr[j]<arr[i] and dy[j] > max: # 마지막 항의 바로 앞에서부터 1까지
           # arr항의 바로 앞의 숫자를 찾는 행위!!
           max = dy[j]
   dy[i] = max+1
   if dy[i] > res: 
       res = dy[i]
print(res)
最初の数字の前には何もないので、1に初期化します.(増分列のサイズは1)
2からiまで、前から1まで、最後の数字とiを比較します.
iより小さい数の中で最大の数を探します
そして+1をしてarr[i]を初期化する.
最後に、増分数列の最大値をresに初期化し続け、
出力します.