Algorithm/알고스팟

algospot - tiling2

jhg0406 2020. 2. 3. 14:05
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
//algospot - tiling2
 
#include <iostream>
#include <vector>
using namespace std;
 
#define INF 1000000007
 
int N;
vector<int> cache;
 
void init()
{
    cin >> N;
    cache = vector<int>(N, -1);
}
 
int dp(int idx)
{
    if(idx == N)
        return 1;
    int& ret = cache[idx];
    if(ret != -1)
        return ret;
    ret = 0;
    if(idx + 1 <= N)
        ret += dp(idx+1);
    if(idx + 2 <= N)
        ret += dp(idx+2);
    ret %= INF;
    return ret;
}
 
int main()
{
    int C; cin >> C;
    for(int tn = 0; tn<C; ++tn)
    {
        init();
        cout << dp(0<< "\n";
    }
}
cs

 

 

 

 

 

https://www.algospot.com/judge/problem/read/TILING2

 

algospot.com :: TILING2

타일링 문제 정보 문제 2xn 크기의 사각형을 2x1 크기의 사각형으로 빈틈없이 채우는 경우의 수를 구하는 프로그램을 작성하세요. 예를 들어 n=5라고 하면 다음 그림과 같이 여덟 가지의 방법이 있습니다. 경우의 수는 n이 커지면 아주 커질 수 있으므로, 1000000007으로 나눈 값을 대신 출력하세요. 입력 입력의 첫 줄에는 테스트 케이스의 수(C <= 50)가 주어집니다. 그후 C줄에 각각 1개의 자연수로 n(1 <= n <= 100)이 주어집니다.

www.algospot.com

 

 

 

 

 

TILING2

경우의수 DP문제