[白俊-1589]1.2.3プラス4
マイコード
import sys
input = sys.stdin.readline
T=int(input())
dp=[[0,0,0] for _ in range(10001)]
dp[1]=[1,0,0]
dp[2]=[1,1,0]
dp[3]=[1,1,1]
last=4
for _ in range(T):
n=int(input())
for i in range(4,n+1):
dp[i]=[dp[i-1][0],dp[i-2][0]+dp[i-2][1],dp[i-3][0]+dp[i-3][1]+dp[i-3][2]]
print(sum(dp[n]))
last=n+1
実行時間:184ミリ秒(pypy 3)
私の答え
dp整数iを1、2、3の和として表す構成は、[1最大構成、2最大構成、3最大構成]と格納される.
dp[i]の1最大構成は、dp[i-3]の1最大構成に等しい.
dp[i]の2最大構成は、dp[i−2]の1最大構成と2最大構成の和に等しい.
dp[i]の3最大構成は、dp[i−1]のすべての構成の和に等しい.
その他のコード
import sys
input = sys.stdin.readline
T=int(input())
dp=[1]*10001
for i in range(2,10001):
dp[i]+=dp[i-2]
for i in range(3,10001):
dp[i]+=dp[i-3]
for _ in range(T):
print(dp[int(input())])
実行時間:72ミリ秒(python 3)
に答える
整数iを1、2、3の和の構成として表し、1が最大値を求めるときの構成、2が最大値を求めるときの構成、3が最大値を求めるときの構成で解く.
1が最大値の構成は1でなければならないので、最初からdp値を1に設定します.
2最大値の配置はdp[i]にdp[i-2]を加えればよい.
同様に、3はdp[i]+=dp[i-3]としてもよい.
上記の手順でdp[i]値を更新する限り、3が最大値の構成は2が最大値の構成には影響しません.
Reference
この問題について([白俊-1589]1.2.3プラス4), 我々は、より多くの情報をここで見つけました https://velog.io/@sue06004/백준-15989-123-더하기-4テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol