inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

7-I와 실수형연산의 한계

dp를 이차원 배열로 만들어서 풀어봤는데, 틀립니다.

해결된 질문

182

google_user

작성한 질문수 28

0

http://boj.kr/7c9fc1fdb4894c518c897537de03f02b

선생님, 안녕하세요~

dp를 이차원 배열로 만들어서 n번째 인덱스까지 돈m을 썼을때의 최대 칼로리 양을 저장하게 했습니다.

 

int dp[5004][10004]; // n번째 인덱스까지 돈m을 썼을때 최대 칼로리양

그 후 나머지 부분은, 동전문제에서 했던 것과 비슷하게,

단지 이차원 배열이니깐 dp[i][j]를 비교할 때, 가격이 이전 인덱스가 더 큰지, 아니면 이번 인덱스에서 가격만큼을 빼고 칼로리만큼을 더한게 더 큰지 비교해주도록 했는데요.

for (int i = 1; i <= n; i++)
        {
            for (int j = 1 * 100; j <= m * 100; j++)
            {
                if (price[i] > j)
                {
                    dp[i][j] = dp[i - 1][j];
                }
                else
                {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - price[i]] + cal[i]);
                }
                mx = max(mx, dp[i][j]);
            }
        }

지금 제가 생각하기에, 코드를 이렇게 짰을때, 일차원배열과 이차원배열이 큰 차이가 있나 싶기도하고, 다른 냅색문제에서 이렇게해서 통과하는 경우가 있었기에,

어떤 차이가 있을까, 반례가 뭐가있을까 질문드리고 싶습니다.

c++ 코딩-테스트

답변 1

1

큰돌

안녕하세요 google님 ㅎㅎ

dp를 이차원 배열로 만들어서 n번째 인덱스까지 돈m을 썼을때의 최대 칼로리 양을 저장하게 했습니다.

>>

무슨 코드인지 이해했습니다. 괜찮은 로직입니다. ㅎㅎ

 

#include <bits/stdc++.h>
using namespace std;

int n, c;
double m, p;
int dp[5004][10004];  
int cal[5004];
int price[5004];
int m1, m2;
int main() { 
    while (true) { 
        scanf("%d %d.%d", &n, &m1, &m2); 
        int max_price = m1 * 100 + m2; 
        if (n == 0) {
            break;
        } 

        for (int i = 1; i <= n; i++) {
            scanf("%d %d.%d", &c, &m1, &m2); 
            cal[i] = c;
            price[i] =  m1 * 100 + m2;
        }

        int mx = 0; 

        for (int i = 1; i <= n; i++) {
            for (int j = 0; j <= max_price; j++) {

                if (price[i] > j)
                {
                    dp[i][j] = dp[i - 1][j];
                }
                else
                {
                    dp[i][j] = max(dp[i - 1][j], dp[i][j - price[i]] + cal[i]);
                }
                mx = max(mx, dp[i][j]);
            }
        }
        printf("%d\n", mx); 
    }

    return 0;
}

다만 이렇게 해야 되지 않을까요?

 

 


또 질문 있으시면 언제든지 질문 부탁드립니다.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 올림. 

4-F 경우의 수 질문입니다.

0

10

1

코딩살구클럽 가입이 안됩니다.

0

31

0

살구 클럽에 대한 질문있습ㄴ디ㅏ

0

34

1

교안 158페이지 문의드립니다

0

34

2

코딩살구클럽 관련 건의사항

0

84

1

코살에 19942 다이어트 문제에 N의 범위가 빠져있슴니다

0

35

1

진행 방법 질문드립니다!

0

70

2

2-I) 왜 이 문제가 그래프이론 카테고리에 있는지 잘 모르겠습니다.

0

60

2

2주차 개념#12 트리 순회

0

32

2

백준사이트가 종료된다고 합니다.

0

296

2

백준 서비스 종료

9

909

1

sk 하이닉스 코테 대비

0

375

2

3-G 최댓값 질문

0

52

1

모듈러 연산 값이 10이 아닌 경우도 있지 않나요?

0

84

2

3-I 코드 질문드립니다.

0

63

2

3-N 질문 있습니다.

0

68

2

학습방법

0

103

2

4-H 질문 있습니다 (코드 리뷰)

0

67

2

코딩테스트 어디까지 준비해야 하는지 질문이 있습니다.

0

177

2

2-O 반례가 무엇일지 어떤 부분이 틀렸는지 잘 모르겠습니다.

0

70

2

2주차 개념 #4-2. 인접행렬 질문있습니다.

0

65

2

1-A 문제풀이 후 궁금한 점이 생겨서 질문드립니다.

0

52

2

조합 재귀 풀이 확인 해주시면 감사하겠습니다.

0

69

2

함수별 시간복잡도

0

75

2