LoCeL
[BOJ 12865] 평범한 배낭 본문
문제는 여기에서 확인할 수 있다.
간단하고 유명한 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 != -1) return 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, -1, sizeof(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