BAEKJOON : 11053


No. 11053


1. Problem

2. My Solution
  • dpリストに要素で終わる部分数列の長さを格納し、この値を用いて最大長値を求める->DP
  • 第1の方法
  • 2入力が1出力のエラー(自分より小さい要素がない場合は0)
  • import sys
    
    n = int(sys.stdin.readline().rstrip())   # n = 6 
    seqeunce = [0] +list(map(int,sys.stdin.readline().rstrip().split()))   
    dp = [0] * (n+1)
     
    for i in range(1,n+1): # 1~6
        if i == 1:
            dp[1] = 1
        else:
            for j in range(1,i): # 최대 1~5
                if seqeunce[j] < seqeunce[i]:
                    dp[i] = max(dp[i], dp[j] + 1)
    
    print(max(dp))
  • 第2の方法
  • import sys
    
    n = int(sys.stdin.readline().rstrip())   # n = 6 
    seqeunce = [0] +list(map(int,sys.stdin.readline().rstrip().split()))   
    dp = [1] * (n+1)
     
    for i in range(1,n+1): # 1~6
        for j in range(1,i): # 최대 1~5
            if seqeunce[j] < seqeunce[i]:
                dp[i] = max(dp[i], dp[j] + 1)
    
    print(max(dp))
    3. Learned
  • 特定の記憶領域(メモリ)に以前の結果値を格納し、次の値を計算するときに以前の値を使用する場合はdpと呼ぶ