문제 URL:
https://www.acmicpc.net/problem/11727
11727번: 2×n 타일링 2
2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오. 아래 그림은 2×17 직사각형을 채운 한가지 예이다.
www.acmicpc.net
위 문제는 2×n 직사각형을 1×2, 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하는 문제로,
2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력하도록 해야 했다.
2*n까지 타일을 채우는 방법을 점화식으로 나타내면 다음과 같이 나온다.
dp[n-1]+2*dp[n-2]
따라서, dp[1]과 dp[2]를 이용하여 2*n까지의 타일을 채우는 식을 세워주면 된다.
#include <iostream>
using namespace std;
int n;
int dp[1001];
int main(){
cin >> n;
dp[0] = 1;
dp[1] = 1;
dp[2] = 3;
for(int i=3; i<=n; i++){
dp[i] = (dp[i-1]+2*dp[i-2])%10007;
}
cout << dp[n];
return 0;
}