白準-階段を登る(2579)
Dynamic Programming
質問する
階段を登るゲームは階段の下の起点から階段の先端の終点までのゲームです.図1>に示すように、階段ごとに一定の点数が書かれており、階段を踏むと階段の点数が得られます.
<図2>に示すように、始点から、第1、2、4、6段の階段を歩いて終点に着き、合計10+20+25+20=75点となる.
階段を登るには以下のルールがあります.
1. 계단은 한 번에 한 계단씩 또는 두 계단씩 오를 수 있다. 즉, 한 계단을 밟으면서 이어서 다음 계단이나, 다음 다음 계단으로 오를 수 있다.
2. 연속된 세 개의 계단을 모두 밟아서는 안 된다. 단, 시작점은 계단에 포함되지 않는다.
3. 마지막 도착 계단은 반드시 밟아야 한다.
そのため、最初の階段に沿って、2番目か3番目の階段を歩くことができます.しかし、最初の階段を踏んで4番目の階段を登ったり、最初の階段、2番目の階段、3番目の階段を連続して踏んだりすることはできません.各段階の点数を与える場合は、ゲームの総点数の最値を求めるプログラムを作成します.
入力
入力した最初の行には、階段の数が表示されます.
2行目から、1行1つ、一番下の階段から、各階段に書いてある点数を順番にあげます.階段の個数は300以下の自然数で、階段に書いてある点数は10000以下の自然数です.
しゅつりょく
1行目に階段を登るゲームで得られる総得点の最値を出力します.
import sys
input = sys.stdin.readline
score = []
n = int(input())
maxScore = [None] * 300
for i in range(n):
score.append(int(input()))
for i in range(n):
if i == 0:
maxScore[0] = score[i]
continue
elif i == 1:
maxScore[1] = score[0] + score[1]
continue
elif i == 2:
maxScore[2] = max(score[0], score[1]) + score[2]
continue
maxScore[i] = max(maxScore[i-3] + score[i-1], maxScore[i-2]) + score[i]
print(maxScore[n - 1])
参照)https://won-percent.tistory.com/entry/はい-DP-質問-推奨
https://yoonhoohwang.tistory.com/67
Reference
この問題について(白準-階段を登る(2579)), 我々は、より多くの情報をここで見つけました https://velog.io/@skkfea07/백준-계단-오르기2579テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol