[伯俊/python/2579]階段を登る



質問リンク:階段を登る
dpアルゴリズムを習い始めたばかりの頃に触れたタイプは階段を登ることです.これはdp問題の基本的な問題だと思います.基本的な問題と違いは、一歩一歩踏み出すと3回連続できないことです.

n=int(input())
stair=[0]*(301)
dp=[0]*(301)
for i in range(n):
    stair[i]=int(input())
dp[0]=stair[0]
dp[1]=stair[0]+stair[1]
dp[2]=max(stair[1]+stair[2],stair[0]+stair[2])
for i in range(3,n):
    dp[i]=max(dp[i-3]+stair[i-1]+stair[i],dp[i-2]+stair[i])
print(dp[n-1])
最初はstairとdpの配列の大きさはnでしたが、実行時にエラーが発生しました.だから配列の大きさを調整して解決しました.
最後の階段を基準に考えていると、前の階段(i-1)を踏んだら、その前に前の階段の前の2つの階段(i-3)を踏んで、前の階段を踏んでいないと最後の階段(i)と前の2つの階段(i-2)を踏んでしまいます.
言葉で表現するのは難しそうです.ノートに書いて解答することをお勧めします.