-
[BOJ]백준 2240번: 자두나무(C++)/DPProblem Solving/BOJ(백준) 2021. 8. 23. 02:27
https://www.acmicpc.net/problem/2240
오늘 깔끔하게 프로그래머스 미로탈출 푸는게 목표였는데.... ^^흠
DP는 항상 어렵다
특히 for문을 잘 쓰는 bottom-up 방식은 생각이 안 난다
그래서 나는 항상 재귀함수를 구현한 뒤에 메모이제이션을 적용한다
DP는 어렵다 . . .
#include <cstdio> #include <algorithm> using namespace std; int T, W; int plum[1005], cache[2][31][1005]; int func(int time, int w, int cur) { if ((time > T) || (w > W)) { return 0; } int& ref = cache[cur][w][time]; if (ref != -1)return ref; ref = 0; if (cur == plum[time]) ref = max(func(time + 1, w, cur), func(time + 1, w + 1, !cur)) + 1; else { ref = func(time + 1, w, cur); if (w < W) ref = max(ref, func(time + 1, w + 1, !cur) + 1); } return ref; } int main() { scanf("%d%d", &T, &W); for (int i = 1; i <= T; i++) { scanf("%d", &plum[i]); if (plum[i] == 2)plum[i] = 0; } fill(&cache[0][0][0], &cache[1][30][T + 1], -1); printf("%d", func(1, 0, 1)); return 0; }
'Problem Solving > BOJ(백준)' 카테고리의 다른 글
[BOJ]백준 3079번: 입국심사(Python)/BinarySearch (429) 2021.08.26 [BOJ]백준 21941번: 문자열 제거(Python)/String, DP (449) 2021.08.25 [BOJ]4358번: 생태학(C++) (419) 2021.08.20 [BOJ]백준 2917번: 늑대 사냥꾼(C++)/Dijkstra (349) 2021.08.16 [BOJ]백준 22234번: 가희와 은행(C++)/Priority Queue (1) 2021.08.15