본문 바로가기
온라인저지

[BOJ] 2718번: 타일 채우기

by plzfday 2018. 5. 31.

풀이

dp[i][j]를 i번째 칸, j의 상태에서 채울 수 있는 경우의 수로 놓고 풀어야 한다. 일차원 배열로 풀려고 하면 사실 경우의 수가 너무 많기 때문에 저렇게 2차원 배열을 이용하면 상대적으로 쉽게 풀 수 있다.

설명을 하기에는 너무 복잡하고 귀찮으므로 직접 찍은 영상을 통해 풀이를 하려고 한다.

코드

#include <cstdio>
int n, T, dp[10001][16];
const int div = 100007;
int main()
{
    dp[0][15] = 1;
    for (int i = 1; i <= 10000; ++i)
    {
        for (int j = 0; j <= 15; ++j)
        {
            dp[i][j] = dp[i - 1][15 - j];
        }
        dp[i][3] += dp[i - 1][15];
        dp[i][6] += dp[i - 1][15];
        dp[i][7] += (dp[i - 1][14] + dp[i - 1][11]);
        dp[i][11] += dp[i - 1][7];
        dp[i][12] += dp[i - 1][15];
        dp[i][13] += dp[i - 1][14];
        dp[i][14] += (dp[i - 1][7] + dp[i - 1][13]);
        dp[i][15] += (dp[i - 1][15] + dp[i - 1][3] + dp[i - 1][12] + dp[i - 1][6]);
    }
    scanf("%d", &T);
    while (T--)
    {
        scanf("%d", &n);
        printf("%d\n", dp[n][15]);
    }
    return 0;
}

 

'온라인저지' 카테고리의 다른 글

[BOJ] 5622번: 다이얼  (0) 2018.06.02
[BOJ] 11052번: 붕어빵 판매하기  (0) 2018.06.02
10844번: 쉬운 계단 수  (0) 2018.06.01
[BOJ] 1520번: 내리막 길  (0) 2018.05.31
[BOJ] 2133번: 타일 채우기  (0) 2018.05.31
[BOJ] 2355번: 시그마  (0) 2018.05.26

댓글