티스토리 뷰

algorithm

BOJ11052: 카드 구매하기

seoyoung02 2021. 12. 10. 23:40

문제 : boj 11052

풀이

- DP 문제

- 배열 _sum[n]은 n개 카드 구매시 최대값이다.

- 배열 _sum의 값을 이용해 구매 카드 수가 n개일 때, (n-1장 구매시 최대값 + 1장 구매가격),(n-2장 구매시 최대값 + 2장 구매가격),...,(n장구매가격)을 비교해 최대값을 _sum[n]에 넣는다.

C++


#include <iostream>

#include <cstdio>

using namespace std;



int N, price\[1001\];

unsigned int \_sum\[1002\];



void dp(int n){

unsigned int \_max(0);

if(n == 1) {

\_sum\[1\] = price\[0\];

dp(n+1);

return;

}

else if(n == N+1) return;

for (int i(1); i < n; i++){

unsigned int tmp = \_sum\[n-i\]+\_sum\[i\];

if(tmp > \_max) \_max = tmp;

}

if (\_max < price\[n-1\]) \_max = price\[n-1\];

\_sum\[n\] = \_max;

dp(n+1);

}



int main(){

freopen("input.txt","r", stdin);

cin >> N;

for (int i(0); i < N; i++){

cin >> price\[i\];

}

dp(1);

cout << \_sum\[N\];

fclose(stdin);

return 0;

}

'algorithm' 카테고리의 다른 글

BOJ2206: 벽 부수고 이동하기  (0) 2021.12.04
댓글
최근에 올라온 글
Total
Today
Yesterday
최근에 달린 댓글
링크
공지사항
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함