본문 바로가기
Algorithm/BOJ

[BOJ/C++]11052번 카드 구매하기

by DEV Lee 2020. 8. 18.

 

11052번: 카드 구매하기

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

www.acmicpc.net


문제

카드 n개가 포함된 카드팩 n가지가 존재. 카드가 i개 포함된 카드팩의 가격은 $P_i$원. 이 카드팩 가격을 최대로 해서 n개의 카드를 구매하는 경우를 구하는 문제.

 

풀이

https://lionontheshore.tistory.com/51

 

[BOJ/C++]1699번 제곱수의 합

https://www.acmicpc.net/problem/1699 1699번: 제곱수의 합 어떤 자연수 N은 그보다 작거나 같은 제곱수들의 합으로 나타낼 수 있다. 예를 들어 11=32+12+12(3개 항)이다. 이런 표현방법은 여러 가지가 될 수 있.

lionontheshore.tistory.com

이 문제와 유사하게 풀었음.

 

내가 틀렸던 부분[런타임 에러]

n을 선언하고, 배열 dp[n]과 p[n]을 선언한 뒤에 n값을 입력받아 런타임에러가 났다. 아주 멍청한 실수..

https://www.acmicpc.net/board/view/22980

 

글 읽기 - 주로 런타임 에러가 발생하는 이유는 무엇인가요?

댓글을 작성하려면 로그인해야 합니다.

www.acmicpc.net

런타임 에러가 나는 이유. 내가 틀린 이유와 아주 정확. 배열 인덱스를 잘못 참조했을 때 나는 오류이다.

소스코드

#include<iostream>
using namespace std;

int main(void){
    int n;cin>>n;
    int p[n+1];//카드팩
    int dp[n+1];
    for(int i=1;i<=n;i++)
        cin>>p[i];
    
    dp[1]=p[1];
    for(int i=2;i<=n;i++){
        dp[i]=p[i];

        for(int j=1;j<i;j++){
            dp[i]=max(dp[i],dp[i-j]+p[j]);
        }
    }
    cout<<dp[n]<<endl;
}

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ/python3]2562번 최댓값  (0) 2021.11.21
[BOJ/C++]9461번 파도반 수열  (0) 2020.09.05
[BOJ/C++]1699번 제곱수의 합  (0) 2020.08.18
[BOJ/C++]2579번 계단오르기  (0) 2020.08.18
[BOJ/C++]1912번 연속합  (0) 2020.07.29

댓글