티스토리 뷰
728x90
문제 링크
7579번: 앱
입력은 3줄로 이루어져 있다. 첫 줄에는 정수 N과 M이 공백문자로 구분되어 주어지며, 둘째 줄과 셋째 줄에는 각각 N개의 정수가 공백문자로 구분되어 주어진다. 둘째 줄의 N개의 정수는 현재 활
www.acmicpc.net
풀이
각 앱별로 사용 중인 메모리 m, 비활성화 했을 경우 비용 c가 주어집니다.
일반적으로 생각했을 땐 메모리의 모든 범위에 대해 최소 비용을 구하는 배낭 dp인데, 메모리의 범위가 너무 커 배열로 잡을 수 없습니다.
관점을 좀 달리하여 모든 비용에 대해 확보할 수 있는 최대의 메모리를 구해줍시다. 비용의 범위는 최대 100이므로 충분히 가능합니다.
그 후 비용 0부터 올라가며 우리가 필요한 메모리 M바이트를 확보할 수 있는지 체크해주면 됩니다.
정답 코드
#include <bits/stdc++.h> #define INF 0x3f3f3f3f using namespace std; using ll = long long; int n, m; int p[111], d[11'111]; int main() { ios_base::sync_with_stdio(0); cin.tie(0); cin >> n >> m; for (int i = 1; i < n + 1; i++) { cin >> p[i]; } for (int i = 1; i < n + 1; i++) { int c; cin >> c; for (int j = 10'000; j >= c; j--) { d[j] = max(d[j], d[j - c] + p[i]); } } for (int i = 0; i <= 10'000; i++) { if (d[i] >= m) { cout << i; break; } } }
728x90
'알고리즘 > 문제 풀이' 카테고리의 다른 글
[BOJ] 백준 9466 텀 프로젝트 (2) | 2021.03.08 |
---|---|
[BOJ] 백준 9328 열쇠 (0) | 2021.03.08 |
[BOJ] 백준 7453 합이 0인 네 정수 (0) | 2021.03.08 |
[BOJ] 백준 2887 행성 터널 (0) | 2021.03.08 |
[BOJ] 백준 2623 음악프로그램 (0) | 2021.03.08 |