728x90
반응형
https://www.acmicpc.net/problem/2302
1. Logic
- DP의 핵심은 중복되는 부분문제를 찾는것이기 때문에 부분문제로는
1. 자기 자리에 앉는 경우
2. 자리를 바꿔 앉는 경우
이렇게 두가지가 있다.
2. Code
#include<bits/stdc++.h>
using namespace std;
int n, m;
int dp[41];
bool vip[41];
int solve(int idx) {
if(idx == n + 1) return 1;
if(idx > n + 1) return 0;
int &ret = dp[idx];
if(ret != -1) return ret;
if(vip[idx]) return solve(idx + 1);
ret = 0;
//자기 자리에 앉는 경우
ret += solve(idx + 1);
//자리를 바꿔앉는 경우
if(!vip[idx + 1]) {
ret += solve(idx + 2);
}
return ret;
}
int main() {
memset(dp, -1, sizeof(dp));
memset(vip, false, sizeof(vip));
cin >> n >> m;
for(int i = 0; i < m; i++) {
int a;
cin >> a;
vip[a] = true;
}
cout << solve(1);
}
알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐
728x90
반응형
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준/Baekjoon] 1987 알파벳 C++ :: DFS (0) | 2023.09.08 |
---|---|
[백준/Baekjoon] 2096 내려가기 C++ :: Dynamic Programming (0) | 2023.09.07 |
[백준/Baekjoon] 20303 할로윈의 양아치 C++ :: DP & BFS (0) | 2023.09.05 |
[백준/Baekjoon] 1729 골목길 C++ :: Bellman-Ford (0) | 2023.09.03 |
[백준/Baekjoon] 1865 웜홀 C++ :: Bellman-Ford (3) | 2023.09.02 |