-
[BOJ]백준 2240번: 자두나무(C++)/DPProblem Solving/BOJ(백준) 2021. 8. 23. 02:27
https://www.acmicpc.net/problem/2240
2240번: 자두나무
자두는 자두를 좋아한다. 그래서 집에 자두나무를 심어두고, 여기서 열리는 자두를 먹고는 한다. 하지만 자두는 키가 작아서 자두를 따먹지는 못하고, 자두가 떨어질 때까지 기다린 다음에 떨어
www.acmicpc.net
오늘 깔끔하게 프로그래머스 미로탈출 푸는게 목표였는데.... ^^흠
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