728x90
반응형
https://www.acmicpc.net/problem/1309
1. Logic
이 문제의 부분문제는 총 3가지로 나눌 수 있다.
1. 사자를 배치하지 않는 경우(항상)
2. 사자를 오른쪽에 배치하는 경우(이전에 사자를 왼쪽에 배치했을 때)
3. 사자를 왼쪽에 놓는경우 (이전에 사자를 오른쪽에 배치했을때)
이렇게 3가지 경우를 끊어서 해결해주면 된다.
아래 코드를 보면 이해가 될 것이다.
2. Code
#include <iostream>
#include <cstring>
using namespace std;
int n;
int dp[100001][3];
int solve(int idx, int prev) {
if(idx == n) return 1;
int &ret = dp[idx][prev];
if(ret != -1) return ret;
ret = 0;
if(prev == 0) {
ret += solve(idx+1, 0);
ret += solve(idx+1, 1);
ret += solve(idx+1, 2);
}
else if(prev == 1) {
ret += solve(idx+1, 0);
ret += solve(idx+1, 2);
}
else if(prev == 2) {
ret += solve(idx+1, 0);
ret += solve(idx+1, 1);
}
return ret %= 9901;
}
int main()
{
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
memset(dp, -1, sizeof(dp));
cin >> n;
cout << solve(0, 0);
}
알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐
728x90
반응형
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준/Baekjoon] 2253 점프 C++ :: Dynamic Programming (0) | 2023.10.24 |
---|---|
[백준/Baekjoon] 11653 소인수분해 C++ :: Math (0) | 2023.10.23 |
[백준/Baekjoon] 11052 카드 구매하기 C++ :: Dynamic Programming (0) | 2023.10.20 |
[백준/Baekjoon] 1915 가장 큰 정사각형 C++ :: Dynamic Programming (0) | 2023.10.19 |
[백준/Baekjoon] 3151 합이 0 C++ :: Binary Search (1) | 2023.10.18 |