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 |