| 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()