ps | |
---|---|
링크 | acmicpc.net/… |
출처 | BOJ |
문제 번호 | 2133 |
문제명 | 타일 채우기 |
레벨 | 실버 2 |
분류 |
동적계획법 |
시간복잡도 | O(logn) |
인풋사이즈 | n<=30 |
사용한 언어 | Python |
제출기록 | 33952KB / 140ms |
최고기록 | 64ms |
해결날짜 | 2020/11/12 |
dp[0] = 1 dp[n] = 3*dp[n-2] + 2*dp[n-4] + 2*dp[n-6] + ... + 2*dp[0] = 3*dp[n-2] + 2*sum(dp[0:n-3:2])
2*sum(dp[0:n-3:2]) = 2*dp[n-4] + 2*dp[n-6] + 2*dp[n-8] + ... + 2*dp[0] = (3*dp[n-4] + 2*dp[n-6] + 2*dp[n-8] + ... + 2*dp[0]) - dp[n-4] = dp[n-2] - dp[n-4]
dp[n] = 3*dp[n-2] + (dp[n-2] - dp[n-4]) = 4*dp[n-2] - dp[n-4]
가 된다
"""Solution code for "BOJ 2133. 타일 채우기".
- Problem link: https://www.acmicpc.net/problem/2133
- Solution link: http://www.teferi.net/ps/problems/boj/2133
"""
from teflib import combinatorics
def main():
n = int(input())
print(0 if n % 2
else combinatorics.linear_homogeneous_recurrence([4, -1], [1, 3],
n // 2))
if __name__ == '__main__':
main()
def main():
n = int(input())
if n % 2:
print(0)
else:
cur, prev = 3, 1
for i in range(2, n, 2):
cur, prev = cur * 4 - prev, cur
print(cur)
if __name__ == '__main__':
main()