Notice
Recent Posts
Recent Comments
«   2024/11   »
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
Archives
Today
Total
관리 메뉴

블로그 언저리인 무언가

[백준/BOJ] 4781 사탕 가게 본문

Programming/BOJ

[백준/BOJ] 4781 사탕 가게

he1fire 2020. 11. 12. 23:56
728x90

문제 : 4781 사탕 가게

 

4781번: 사탕 가게

각 테스트 케이스의 첫째 줄에는 가게에 있는 사탕 종류의 수 n과 상근이가 가지고 있는 돈의 양 m이 주어진다. (1 ≤ n ≤ 5,000, 0.01 ≤ m ≤ 100.00) m은 항상 소수점 둘째자리까지 주어진다. 다음 n개

www.acmicpc.net

사탕가게에 있는 모든 사탕의 가격과 칼로리가 주어질 때,

보유한 금액 내에서 칼로리합이 가장 크도록 사탕을 사는 문제이다.

같은 사탕을 여러 개 살 수 있기 때문에 DP 알고리즘을 사용해서 배열을 채우면 된다.

입력으로 주어지는 실수를 정수로 바꿀 때

오차가 날 수 있으므로 반올림을 위해서 0.5를 더한 후 바꾼다.


Code

#include <bits/stdc++.h>
#define ll long long
using namespace std;
ll N, M, arr[10005];
double m;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    while (1){
        fill(&arr[0],&arr[10004],0);
        cin >> N >> m;
        M=(ll)(m*100+0.5);
        if (N==0 && M==0)
            break;
        for (ll i=0;i<N;i++){
            ll a, b;
            double c;
            cin >> a >> c;
            b=(ll)(c*100+0.5);
            for (ll j=1;j<=M;j++){
                if (j>=b){
                    arr[j]=max(arr[j],arr[j-b]+a);
                }
            }
        }
        cout << arr[M] << "\n";
    }
    return 0;
}
728x90

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

[백준/BOJ] 5972 택배 배송  (0) 2020.11.16
[백준/BOJ] 20114 미아 노트  (0) 2020.11.13
[백준/BOJ] 2110 공유기 설치  (0) 2020.10.12
[백준/BOJ] 18116 로봇 조립  (0) 2020.10.09
[백준/BOJ] 13140 Hello World!  (0) 2020.10.07
Comments