[백준 11052] 카드 구매하기 (DP, 점화식)

2022. 10. 29. 21:22·알고리즘

https://www.acmicpc.net/problem/11052

 

11052번: 카드 구매하기

첫째 줄에 민규가 구매하려고 하는 카드의 개수 N이 주어진다. (1 ≤ N ≤ 1,000) 둘째 줄에는 Pi가 P1부터 PN까지 순서대로 주어진다. (1 ≤ Pi ≤ 10,000)

www.acmicpc.net

문제 설명이 조금 길고 복잡해 보이지만, 전형적인 DP문제이다!
문제풀이를 위해 필요한 부분만 정리하자면 아래와 같다.

"최대한 많이 지불해서 카드 N개 구매하려고 한다. 카드가 i개 포함된 카드팩의 가격은 Pi원이다."

예를 들어, 카드팩이 총 4가지 종류가 있고, P1 = 1, P2 = 5, P3 = 6, P4 = 7인 경우에 민규가 카드 4개를 갖기 위해 지불해야 하는 금액의 최댓값은 10원이다. 2개 들어있는 카드팩을 2번 사면 된다.

 

문제를 이해했다면, 이제 점화식을 만들기 위한 규칙을 찾아보자.

 

  • 구매하고싶은 카드의 장수를 N개,  arr[i]에는 입력받은 카드팩별 가격을 저장한다. 이때,i장이 들어있는 카드팩의 가격은 arr[i]에 저장한다.
  • dp[i]에는 i장의 카드를 구매하기 위한 최대 금액을 저장한다.

 

편의상, arr[1]~arr[4]를 ①②③④로 나타내었습니다.


<소스코드>

 

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
32
33
34
35
36
37
38
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
 
int compare(int n1, int n2) {
    return n1 > n2 ? n1 : n2;
}
 
int main() {
    int N, max;
    int result = 0;
    int dp[10001] = { 0, };
    int arr[10001] = { 0, };
 
    //입력받기
    scanf("%d", &N);
    for (int i = 1; i <= N; i++) {
        scanf("%d", &arr[i]);
    }
 
    //
    if (N == 1) {
        printf("%d", arr[1]);
        return 0;
    }
    dp[1] = arr[1];
    result = dp[1];
    for (int i = 2; i <= N; i++) {
        max = arr[i];
        for (int j = 1; j <= i - 1; j++) {
            max = compare(max, dp[j] + arr[i - j]);
        }
        dp[i] = max;
        result = compare(max, result);
    }
 
    printf("%d", result);
    return 0;
}
Colored by Color Scripter
cs

'알고리즘' 카테고리의 다른 글

[백준 9012] 괄호 (stack활용)  (0) 2022.11.28
카운팅정렬, 계수정렬 알고리즘(Counting sort) + 백준 10989번  (4) 2022.11.07
[백준 1912] 연속 합 (DP, 점화식)  (0) 2022.10.24
[백준 2579] 계단 오르기 (DP, 점화식)  (1) 2022.10.18
[백준 10844, 11057] 쉬운 계단 수, 오르막 수 (DP, 점화식)  (1) 2022.10.12
'알고리즘' 카테고리의 다른 글
  • [백준 9012] 괄호 (stack활용)
  • 카운팅정렬, 계수정렬 알고리즘(Counting sort) + 백준 10989번
  • [백준 1912] 연속 합 (DP, 점화식)
  • [백준 2579] 계단 오르기 (DP, 점화식)
공부하는 나무꾼
공부하는 나무꾼
  • 공부하는 나무꾼
    헤맨 만큼 내 땅이다
    공부하는 나무꾼
  • 전체
    오늘
    어제
  • 글쓰기/관리
    • 분류 전체보기
      • AWS
      • SAA-C03
      • 네트워크 보안
      • 최신정보보안이론
      • 컴퓨터네트워크
      • OpenFaaS
      • C++
      • Java
      • HTML, CSS
      • 자료구조
      • 알고리즘
      • 정보보안인재양성
      • [MAC]트러블슈팅&Tip
      • 공부
      • Web(Django)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Web Server
    java #자바 #객체지향프로그래밍 #복습
    웹애플리케이션서버
    등록번호
    AWS
    aws-c03
    웹클라이언트
    cloud
    클라우드
    SAA-C03
    자격증
    웹서버
    web application server
    WAS
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
공부하는 나무꾼
[백준 11052] 카드 구매하기 (DP, 점화식)
상단으로

티스토리툴바