728x90
반응형
https://www.acmicpc.net/problem/11052
1. Logic
dp배열이 의미하는 것은 배열에 해당하는 카드를 구매할때의 최댓값이다. dp[구매하는 카드 갯수] = 최댓값.
최댓값을 구하는 방법은
1개짜리 팩 + 카드 3개를 구매하는데 필요한 최댓값
2개짜리 팩 + 카드 2개를 구매하는데 필요한 최댓값
3개짜리 팩 + 카드 1개를 구매하는데 필요한 최댓값
4개짜리 팩
이렇게 경우의 수를 나눠볼 수 있다.
2. Code
#include <iostream>
#include <cstring>
using namespace std;
int n;
int cost[10001];
int dp[1001];
int solve(int amount) {
if(amount == 0) return 0;
int &ret = dp[amount];
if(ret != -1) return ret;
ret = 0;
for(int i = 1; i <= amount; i++) {
ret = max(ret, cost[i] + solve(amount - i));
}
return ret;
}
int main() {
ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);
memset(dp, -1, sizeof(dp));
cin >> n;
for(int i = 1; i <= n; i++) {
cin >> cost[i];
}
cout << solve(n);
}
알고리즘 Solve 후 제가 생각한 Logic을 기록하는 개인 공부 블로그입니다.
내용 중 최적화가 가능한 부분등은 언제든지 댓글로 틀린 부분 및 피드백 주시면 공부 및 반영하겠습니다🧐
728x90
반응형
'Algorithm > Beakjoon' 카테고리의 다른 글
[백준/Baekjoon] 11653 소인수분해 C++ :: Math (0) | 2023.10.23 |
---|---|
[백준/Baekjoon] 1309 동물원 C++ :: Dynamic Programming (0) | 2023.10.21 |
[백준/Baekjoon] 1915 가장 큰 정사각형 C++ :: Dynamic Programming (0) | 2023.10.19 |
[백준/Baekjoon] 3151 합이 0 C++ :: Binary Search (1) | 2023.10.18 |
[백준/Baekjoon] 14889 스타트와 링크 C++ :: Back Tracking & Brute Force (1) | 2023.10.17 |