정답의 범위를 가늠하는 건 문제마다 제약조건이 천차만별일 테니, 이 문제에 국한해서 설명드려볼게요.
우선 n자리 이친수의 개수를 an이라 하고, 편의를 위해 이친수와 거의 같은 조건을 만족하되 0으로 시작하는 n자리 이진수의 개수를 bn이라고 해 봅시다.
- an = (1이 연속으로 나타나지 않는 n자리 이진수 중 1로 시작하는 것의 개수)
- bn = (1이 연속으로 나타나지 않는 n자리 이진수 중 0으로 시작하는 것의 개수)
그러면 an, bn에 대한 점화식을 세울 수 있는데, 이 점화식은 결국 다음과 같은 형태를 가지게 될 것입니다.
- an+1 = bn
- bn+1 = an + bn
이것을 다시 쓰면 결국
- vn+1 = [ an+1 ] = [ 0 1 ] [ an ] = Avn
- [ bn+1 ] [ 1 1 ] [ bn ]
즉 행렬에 의한 곱으로 나타낼 수 있습니다. 이 행렬을 A라고 하고, 대각화(diagonalization)를 하여
- A = PDP-1, D: diagonal matrix of eigenvalues
로 표현했다고 해 봅시다. 그러면
- vn = Anv0 = PDnP-1v0
이때 D는 diagonal matrix이므로 Dn을 계산하기 위해서는 diagonal entry를 각각 n제곱하면 됩니다.
이렇게 하면, an은 vn의 첫 번째 성분이고, 대략적으로 (v0의 크기) x (D에서 절댓값이 가장 큰 eigenvalue의 절댓값) 정도의 크기를 가진다는 것을 알 수 있습니다.
결국 하고 싶었던 말은, coupled linear recurrence equation의 해는 계수행렬의 eigenvalue spectrum으로 그 growth를 가늠할 수 있다는 점입니다.
도움이 되셨기를 바랍니다!
chlwlsgur000 1년 전
DP문제 풀 때마다 정답의 범위가 int를 벗어나는지 안 벗어나는지 이해하고
문제를 풀고싶은데 어떤식으로 계산을 해야 정답이 int에서 벗어나는지 궁금합니다.