[解答-伯俊]10844単純な階段数


解答方法


  • dpリスト(サイズ10)を準備します.現在の0から9の数字が含まれています(可能な場合).

  • 現在のビット数がnである場合、数字はdp[n−1]+dp[n+1]である.

  • 文字列の長さは最大100なので、10個の数字で合計100回計算されるので、100×10 x 2です.
  • 時間の複雑さ


    O(n x 10 x 2) = O(n)

    コード#コード#

    N = int(input())
    dp = [1] * 10
    dp[0] = 0
    for i in range(1,N):
        temp = [0] * 10
        for j in range(10):
            nj = j - 1
            if 0 <= nj:
                temp[j] += dp[nj]
            nj = j + 1
            if nj < 10:
                temp[j] += dp[nj]
        dp = temp[:]
    print(sum(dp)%1000000000)