본문 바로가기
Algorithm/동적계획법(DP)

11727 2 x n 타일링 2

by neohtux 2020. 3. 17.
728x90

https://www.acmicpc.net/problem/11727

 

11727번: 2×n 타일링 2

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

www.acmicpc.net

2×n 타일링 2 성공

시간 제한메모리 제한제출정답맞은 사람정답 비율

1 초 256 MB 23410 13983 11186 59.722%

문제

2×n 직사각형을 2×1과 2×2 타일로 채우는 방법의 수를 구하는 프로그램을 작성하시오.

아래 그림은 2×17 직사각형을 채운 한가지 예이다.

입력

첫째 줄에 n이 주어진다. (1 ≤ n ≤ 1,000)

출력

첫째 줄에 2×n 크기의 직사각형을 채우는 방법의 수를 10,007로 나눈 나머지를 출력한다.

 

 

<풀이>

1.  (2xn)타일링 문제에 2x2 정사각형이 하나 추가된 형태.

 

2. 기존 2xn 점화식에 2x2 정사각형이 추가되는 점화식을 세워 푼다

 

#include<iostream>

using namespace std;

int dp[1001];
int go(int n);

int main(void)
{
	int n;
	cin >> n;

	int ans = go(n);

	cout << ans << '\n';
	return 0;
}

int go(int n)
{
	if (n <=1) return 1;
	if (dp[n] > 0) 
		return dp[n];

	dp[n] = (2*go(n - 2) + go(n - 1)) % 10007;

	return dp[n];
}
300x250

'Algorithm > 동적계획법(DP)' 카테고리의 다른 글

2193 이친수  (0) 2020.03.17
10844 쉬운 계단수  (0) 2020.03.17
2579 계단 오르기  (0) 2020.01.22
1149 RGB거리  (0) 2020.01.22
9095 1,2,3 더하기  (0) 2020.01.20

댓글