1) 1003번
zero = [1, 0, 1]
one = [0, 1, 1]
def fibonacci(num):
length = len(zero)
if num >= length:
for i in range(length, num+1):
zero.append(zero[i-1] + zero[i-2])
one.append(one[i-1] + one[i-2])
print('{} {}'.format(zero[num], one[num]))
T = int(input())
for _ in range(T):
fibonacci(int(input()))
2) 9184번
import sys
input = sys.stdin.readline
def w(a, b, c):
if a <= 0 or b <= 0 or c <= 0:
return 1
elif a > 20 or b > 20 or c > 20:
return w(20, 20, 20)
if dp[a][b][c] :
return dp[a][b][c]
if a<b<c :
dp[a][b][c] = w(a,b,c-1) + w(a,b-1,c-1) - w(a,b-1,c)
else:
dp[a][b][c] = w(a-1,b,c) + w(a-1,b-1,c) + w(a-1,b,c-1) - w(a-1,b-1,c-1)
return dp[a][b][c]
dp = [[[0 for _ in range(21)] for _ in range (21)] for _ in range (21)]
while True:
a,b,c = map(int, input().split())
if a==-1 and b==-1 and c==-1:
break
print("w({}, {}, {}) = {}".format(a,b,c,w(a,b,c)))
3) 1904번
n = int(input())
tab = {1:1,2:2}
def zero_one(n):
if n in tab:
return tab[n]
else:
tab[n] = (zero_one(n-1) + zero_one(n-2))%15746
return tab[n]
print(zero_one(n))