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

LoCeL

[BOJ 12865] 평범한 배낭 본문

PS

[BOJ 12865] 평범한 배낭

LoCeL 2020. 8. 13. 19:58

문제는 여기에서 확인할 수 있다.


간단하고 유명한 knapsack문제이다.

D[k][n]을 n번째 물건까지 보고, 배낭의 무게가 k일 때, 배낭의 물건의 가치의 합의 최대라고 놓으면 점화식은 D[k][n] = max(D[k-u[i]][i+1] + e[i])이다. (u는 물건의 무게, e는 가치)

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
31
32
#include<bits/stdc++.h>
 
using namespace std;
 
typedef long long int lld;
 
lld s, n, u[105], e[105];
lld d[100001][105];
 
lld solve(int cap, int i) {
    if(i == n) return 0;
    lld &ret = d[cap][i];
    if(ret != -1return ret;
    ret = solve(cap, i+1);
    if(cap >= u[i])
        ret = max(ret, solve(cap - u[i], i+1+ e[i]);
    return ret;
}
 
int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cin >> n;
    cin >> s; 
    vector<int> rst;
    for(int i = 0; i < n; i++)
        cin >> u[i] >> e[i];
    memset(d, -1sizeof(d));
    cout << solve(s, 0<< endl;;
    return 0;
}
 
cs

'PS' 카테고리의 다른 글

[BOJ 7570] 줄 세우기  (0) 2021.10.24
[BOJ 2759] 팬케익 뒤집기  (0) 2021.06.27
[BOJ 11727] 2 x n 타일링 2  (0) 2020.08.05
[BOJ 11724] 연결 요소의 개수  (0) 2020.08.05
[BOJ 8986] 전봇대  (0) 2020.08.04
Comments