https://www.acmicpc.net/problem/2302
2302번: 극장 좌석
주어진 조건을 만족하면서 사람들이 좌석에 앉을 수 있는 방법의 가짓수를 출력한다. 방법의 가짓수는 2,000,000,000을 넘지 않는다. (2,000,000,000 < 231-1)
www.acmicpc.net
VIP석을 기준으로 완전히 나뉘므로, 나머지 것들의 경우의 수를 모두 구해 곱해주면 된다. 그리고 각각의 경우의 수들은 모두 피보나치 수열의 항들이다. (i번째 사람이 자릴 바꾸는 경우와 안바꾸는 경우)
#include <cstdio>
int main(void){
int N, M, cnt=1, t1=0, t2=0;
scanf("%d %d",&N, &M);
int dp[41]={1,1,2};
for(int i=3; i<41; i++){
dp[i] = dp[i-1] + dp[i-2];
}
for(int j=0; j<M; j++){
scanf("%d",&t2);
cnt *= dp[t2-t1-1];
t1=t2;
}
cnt =cnt*dp[N-t2];
printf("%d",cnt);
}
'알고리즘 문제' 카테고리의 다른 글
[C/C++ 백준 10835번] 카드게임 (Silver 1) (0) | 2020.05.19 |
---|---|
[C/C++ 백준 1932번] 정수 삼각형 (Silver 1) (0) | 2020.05.19 |
[C/C++ 백준 9184번] 신나는 함수 실행 (Silver 2) (0) | 2020.05.17 |
[C/C++ 백준 11060번] 점프 점프 (Silver 2) (0) | 2020.05.17 |
[C/C++ 백준 9251번] LCS (Gold 5) (0) | 2020.05.17 |