728x90
개요
https://www.acmicpc.net/problem/2302
그냥저냥 풀만한 DP문제다.
풀이
VIP를 기준으로 집단을 나누었다.
각 집단들의 경우의 수(피보나치 수)를 곱하면 모든 경우의 수를 구할 수 있다.
코드
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
cin.tie(0)->sync_with_stdio(0);
int dp[41] = { 0, 1, 2 };
int N, M;
int result = 1;
cin >> N >> M;
for (int i = 3; i < 41; i++)
dp[i] = dp[i - 1] + dp[i - 2];
int lastVip = 0;
while (M--)
{
int vip;
cin >> vip;
if(vip - lastVip - 1 > 0)
result *= dp[vip - lastVip - 1];
lastVip = vip;
}
if(N != lastVip)
result *= dp[N - lastVip];
cout << result;
}
'알고리즘&자료구조 > 문제' 카테고리의 다른 글
[BOJ] 1149 RGB거리 C++ (0) | 2023.05.15 |
---|---|
[BOJ] 4811 알약 C++ (0) | 2023.05.15 |
[BOJ] 9372 상근이의 여행 C++ (0) | 2023.03.28 |
[BOJ] 1238 파티 C++ (0) | 2023.03.07 |
[BOJ] 5972 택배 배송 C++ (0) | 2023.03.06 |