반응형
타일링
어떻게 풀까?
그림과 같이 n개의 가로 벽을 세우면, n - 1개를 만드는 경우와 n - 2 개로 나누는 경우를 더하면 n개의 벽에 대한 값을 구할 수 있습니다.
즉, 점화식은 다음과 같습니다.
이는 매우 간단하게 반복문을 통해서 구할 수 있습니다. 그리고, 이 수는 피보나치 수가 됩니다!
이 수는 나중에 매우 커지므로, 문제에서 요구하는 모듈러연산을 이용하는 것을 사용하여 답을 출력합시다!
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #pragma once #include<cstdio> const int INF = 1000000007; int fibo[101] = { 1, 1}; int main() { int t, n; scanf("%d\n", &t); for (int i = 2; i <= 100; i++) { fibo[i] = (fibo[i - 1] + fibo[i - 2]) % INF; } while (t--) { scanf("%d\n", &n); printf("%d\n", fibo[n]); } return 0; } | cs |
여담
fibo[0]과 fibo[1]을 1로 최신화 하고, 반복문에서는 2부터 순환한다는 것이 살짝 중요한 포인트입니다.
반응형
'공부 > 알고리즘 문제풀이' 카테고리의 다른 글
[알고스팟] 비대칭 타일링 (0) | 2018.06.16 |
---|---|
[알고스팟] 삼각형 위의 최대 경로 개수 세기 (0) | 2018.06.16 |
[알고스팟] Quantization (2) | 2018.06.15 |
[알고스팟] 원주율 외우기 (0) | 2018.06.15 |
[알고스팟] 합친 LIS (0) | 2018.06.14 |