알고리즘
DP
1.5볼트
2023. 5. 28. 01:37
728x90
다이나믹 프로그래밍 중 하나
리스트의 값이 점점 커지기 떄문에 답이 나머지를 출력하는거라면 중간에 계속 나눠준다
수의 크기가 작아지기 때문에 그게 더 빠르다
더하기라서 가능 곱하기면 더 큰수로 나눠야함
n1=1000000
a=[0]*n1
b=[0]*n1
c=[0]*n1
c1=[0]*n1
c2=[0]*n1
c3=[0]*n1
a[0]=c[0]=b[0]=c2[0]=1
mi=10**7
for n in range(1,n1):
a[n]=(a[n-1]+b[n-1]+c[n-1])%mi
b[n]=(b[n-1]+c2[n-1])%mi
c3[n]=(c2[n-2]-c3[n-1])%mi
c2[n]=(b[n]-c3[n])%mi
c1[n]=(c[n-2]-c1[n-1])%mi
c[n]=(a[n]-c1[n])%mi
#a[n-3]=b[n-3]=c[n-3]=c1[n-3]=c2[n-3]=c3[n-3]=0
print((a[n1-1]+b[n1-1]+c[n1-1])%1000000)
#a[-1]+b[-1]+c[-1]