[BOJ/Python]1722次最長減少部分数列



この問題はダイナミックプログラミングで解決した.方法は、数列を巡回し、数が現在の数より多い場合、dp配列の現在位置を更新することです.点火式はdp[i]=max(dp[i],dp[j]+1)である.
  • nと入力します.
  • aと入力します.
  • dpを1 n個に初期化した.
  • nを繰り返すiに対してfor文を行う.
    ->i反復するjのfor文.
    -->a[j]がa[i]より大きい場合、dp[i]はdp[i]およびdp[j]+1のより大きな値に更新される.
  • dp出力最大数.
  • Code

    n=int(input())
    a=list(map(int, input().split()))
    dp=[1]*n
    for i in range(n):
        for j in range(i):
            if a[j]>a[i]:
                dp[i]=max(dp[i], dp[j]+1)
    print(max(dp))