반응형
https://www.acmicpc.net/problem/2302
브루트포스로 풀었다가 시간초과가 났었습니다. dp문제였습니다.
각 vip석 사이의 가능한 좌석 경우의 수는 피보나치 수열로 증가하였습니다.
이를 이용하여 각 vip석 사이의 가능한 좌석 경우의 수를 모두 곱하였습니다.
#include <cstdio>
#include <cmath>
int n, m, k, c = 1;
int vip[41] = { 0 };
int dp[41] = { 1,1 };
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= m; i++) {
scanf("%d", &k);
vip[i] = k;
}
for (int i = 2; i <= n; i++)
dp[i] = dp[i - 1] + dp[i - 2];
for (int i = 1; i <= m; i++)
c *= dp[vip[i] - vip[i - 1] - 1];
printf("%d", c * dp[n - vip[m]]);
}
반응형
'Algorithm' 카테고리의 다른 글
백준 15654 : N과 M (5) (0) | 2021.11.11 |
---|---|
백준 2437 : 저울 (0) | 2021.11.11 |
백준 17836 : 공주님을 구해라! (0) | 2021.11.11 |
백준 16936 : 나3곱2 (0) | 2021.11.11 |
백준 17070 : 파이프 옮기기 1 (0) | 2021.11.11 |