Search
Duplicate

카드 구매하기 (11052)

생성일
2021/03/20 18:19
태그

문제

풀이

그냥 완전 탐색에 메모이제이션 추가된 느낌
n 개의 카드팩을 사는데 최대로 드는 비용을 dp에 저장
실제로 모든 경우를 다 사보는데 만약에 이미 사본경우가 있으면 저장해둔 값 쓴다.
이떄 n 이 음수가 되면 안되기떄문에 if (num - i >= 0) 조건문을 걸어준다.
아니면 if (num < 0) return (-999999) 이런식도 가능하다.

구현

#include <iostream> #include <vector> #include <set> using namespace std; int n; vector<int> cards; vector<int> dp; void pre() { ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); } void input() { cin >> n; cards.resize(n + 1); dp.resize(n + 1); for(int i = 1; i <= n; i++) cin >> cards[i]; } int rec(int num) { int price; price = 0; if (num == 0) return (0); if (dp[num]) return (dp[num]); for(int i = 1; i <= n; i++) if (num - i >= 0) price = max(rec(num - i) + cards[i], price); dp[num] = price; return (dp[num]); } void solve() { cout << rec(n) << endl; } int main() { input(); solve(); return (0); }
C++
복사