白駿1904 01タイル
https://www.acmicpc.net/problem/1904
ルールが見つかりました.N=1->1,N=2->2.
n=3の場合、端数を1と00の場合に加算すればよい.では,最終的にN=2とN=1の場合,ケースの数を加算すればよい.結局フィボナッチ.
しかし,再帰関数の形で解くと,テストボックスは正しいが,常に深さを超える.
だから私は一つ一つ計算すればいいです.
ルールが見つかりました.N=1->1,N=2->2.
n=3の場合、端数を1と00の場合に加算すればよい.では,最終的にN=2とN=1の場合,ケースの数を加算すればよい.結局フィボナッチ.
しかし,再帰関数の形で解くと,テストボックスは正しいが,常に深さを超える.
import sys
def tile(N):
if N == 1:
return dp[1]
elif N == 2:
return dp[2]
dp[N] = tile(N-1) + tile(N-2)
return dp[N]
N = int(sys.stdin.readline().strip())
dp = [0] * 1000001
dp[1] = 1
dp[2] = 2
print(tile(N) % 15746)
検索すると再帰関数のパフォーマンスが悪いことがわかりました.だから私は一つ一つ計算すればいいです.
import sys
N = int(sys.stdin.readline().strip())
dp = [0] * 1000001
dp[1] = 1
dp[2] = 2
for i in range(3, N+1):
dp[i] = (dp[i-1] + dp[i-2])%15746
print(dp[N])
Reference
この問題について(白駿1904 01タイル), 我々は、より多くの情報をここで見つけました https://velog.io/@chss3339/백준-1904-01타일テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol