BOJ::2302 극장좌석

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


dp문제이다.

좌석이 1개일 경우 가능한 경우 : 1

좌석이 2개일 경우 가능한 경우 : 2

좌석이 3개일 경우 가능한 경우 : 3

...

좌석이 n개일 경우 가능한경우 : fib(n) 이다.


그러므로 vip좌석인 경우에 끊어 끊기는 부분들의 갯수를 가지고 res*fib(n) 해주면 된다.

문제의 경우 3/2/2 의 부분으로나뉘어 있으므로 fib(3)*fib(2)*fib(2) 가 답이다.


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
#include <stdio.h>
int fixed[41];
long long d[41];
 
int main() {
    int n, m;
    scanf("%d %d"&n, &m);
    for (int i = 0; i < m; i++) {
        int x;
        scanf("%d"&x);
        fixed[x]++;
    }
 
    //피보나치 배열 구하는 부분
    d[0= 1;
    d[1= 1;
    for (int i = 2; i <= 40; i++) {
        d[i] = d[i - 1+ d[i - 2];
    }
 
    //결과값 계산
    int idx = 1;
    long long res = 1;
    for (int i = 1; i <= n; i++) {
        if (fixed[i] == 0) {
            idx++;
        }
        else {
            res *= d[idx-1];
            idx = 1;
        }
    }
    if (idx != 0) {
        res *= d[idx-1];
    }
 
    printf("%lld\n", res);
}
cs




'BOJ::문제풀이' 카테고리의 다른 글

14502 연구소  (0) 2018.01.27
1520 내리막 길  (0) 2018.01.27
1941 소문난칠공주  (0) 2018.01.26
14888 연산자 끼워넣기  (0) 2018.01.26
1958 LCS3  (0) 2018.01.14

+ Recent posts