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

[백준][2133번][DP] 타일 채우기

by 우툴 2016. 4. 12.
728x90

타일 채우기

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

<코드>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#include <stdio.h>
 
int main(void){
 
    int Dp[31= {};
    int result[31= {};
    int K;
    Dp[0= 1;    result[0= 1;
    Dp[2= 3;
    for (int i = 4; i <= 30; i += 2)
        Dp[i] = 2;
 
    scanf("%d", &K);
 
    for (int i = 2; i <= K; i+=2){
        for (int j = 2; j <= i; j += 2){
            result[i] += Dp[j] * result[i - j];
 
        }
    }
 
    printf("%d\n", result[K]);
 
    return 0;
}
cs

<문제 푼 요령>

1.  타일이 만들어 질 수 있는 경우는 짝 수 일때 뿐이다.

2.  타일이 추가될 때의 경우를 생각해 보자. 예를 들어 

-2 개일 때 : 3개이다. 

-4 개일 때 : 앞이 2개로 만들 수 있는 경우 * 4-2개로 만들 수 있는 경우 + 4개로만 만들 수 있는 경우 * 4-4개로 만들 수 있는 경우

-6 개일 때 : 앞이 2개로 만들 수 있는 경우 * 6-2개로 만들 수 있는 경우 + 앞이 4개로만 만들 수 있는 경우 *  6-4개로 만들 수 있는 경우 + 앞이 6개로만 만들 수 있는 경우 * 6-6개로 만들 수 있는 경우

3. 위에 껄로 보면 과거의 것으로 새롭게 만드는 것과 자기 자신의 숫자만큼 유일하게 만들 수 있는 경우를 더하면 되는 것이다.

4. 그렇게 진행하면 마지막에 K에 들어오는 값이 만들 수 있는 타일의 수가 된다.

728x90

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

[백준][11726번][DP] 2xn 타일링  (2) 2016.04.12
[백준][1463번][DP] 1로 만들기  (1) 2016.04.12
[백준][1520번][DP] 내리막길  (8) 2016.04.12
[백준][9465번][DP] 스티커  (1) 2016.04.12
[Dovelet][DP] 01knapsack  (0) 2016.04.12

댓글