BOJ 11052[백준 11052]
#algorithm#baekjoon#dynamic-programming2019.06.20
조건
- 카드는 카드팩의 형태로만 구매할 수 있다.
- 카드의 갯수가 적은 팩이더라도 가격이 비싸면 높은 등급의 카드가 많이 들어있다.
- 카드팩의 종류는 카드 1개가 포함된 카드팩, 카드 2개가 포함된 카드팩, ... 카드 N개가 포함된 카드팩과 같이 총 N가지가 존재한다.
결과
- 카드 N개를 갖기 위해 지불해야 하는 금액의 최댓값
해결 방법
- 카드 N개를 구매할 때의 경우를 찾고 식으로 만든다.
- 카드 1개가 들어있는 팩을 구매하고, 카드를 N-1개 구매한다.
- 카드 2개가 들어있는 팩을 구매하고, 카드를 N-2개 구매한다.
- 카드 N개가 들어있는 팩을 구매하고, 카드를 N-N개 구매한다.
따라서, dpn = cardPackPricen + dpn-i
핵심 코드
for(int i = 1; i <= N; i++) {
for(int j = 1; j <= i; j++) {
result[i] = Math.max(result[i], result[i - j] + price[j]);
}
}
System.out.println(result[N]);
전체 소스 코드는 여기서 확인하실 수 있습니다.
끝까지 읽어주셔서 감사합니다.