반응형

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

 

2302번: 극장 좌석

주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1)

www.acmicpc.net

 

브루트포스로 풀었다가 시간초과가 났었습니다. 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

+ Recent posts