본문 바로가기
BOJ

BOJ 7579 앱

by khyu2 2020. 12. 13.

www.acmicpc.net/problem/7579

 

7579번: 앱

입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활

www.acmicpc.net

 

배낭 문제의 변형이다. 메모리와 비용이 주어지는데 dp테이블을 메모리를 기준으로 채워야 하나?

생각했는데 비용을 기준으로 dp테이블을 채워줘야 한다.

 

예제를 보면 

 

30 10 20 35 40

3 0 3 5 4

 

가 주어지는데 

0   1   2  3   4  5   6   7  8  9   10   11   12  13   14  15

10 10 10 40 50 50 60 80 80 85 100 100 115 115 115 135

이런 식으로 테이블을 채워주고 그때의 m값의 인덱스를 찾아주면 된다.

 

 

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
#include <iostream>
#include <algorithm>
using namespace std;
 
int n, k, sum, w[101], v[101], d[100001];
 
int main() {
    ios::sync_with_stdio(false); cin.tie(0);
 
    cin >> n >> k;
    for (int i = 0; i < n; ++i) cin >> w[i];
    for (int i = 0; i < n; ++i) cin >> v[i], sum += v[i];
 
    for (int i = 0; i < n; ++i)
        for (int j = sum; j >= v[i]; --j)
            d[j] = max(d[j], d[j - v[i]] + w[i]);
    
    //for (int i = 0; i <= sum; ++i) cout << d[i] << ' ';
    //cout << endl;
 
    int i;
    for (i = 0; i < sum && d[i] < k; ++i);
    cout << i << endl;
 
    return 0;
}
cs

 

'BOJ' 카테고리의 다른 글

BOJ 1446 지름길  (0) 2020.12.16
BOJ 1915 가장 큰 정사각형  (0) 2020.12.13
BOJ 5052 전화번호 목록  (0) 2020.12.10
BOJ 5014 스타트링크  (0) 2020.12.10
BOJ 11066 파일 합치기  (0) 2020.12.05