728x90
https://www.acmicpc.net/problem/7579
알고리즘 설명
문제 설명
앱을 비활성화하기 위한 최소 비용으로 메모리를 확보해야한다.
DP를 활용하여 풀이했다.
코드 설명
dp[i][j] : i번째 앱까지 고려했을 때, j의 비용으로 확보할 수 있는 최대 메모리
필요한 메모리를 확보했을 경우 최소 비용을 갱신
import sys
input = sys.stdin.readline
# 입력
n, m = map(int, input().split())
memories = [0] + list(map(int, input().split())) # 앱들이 사용하는 메모리
costs = [0] + list(map(int, input().split())) # 앱들을 비활성화하는 비용
# DP 테이블 초기화
# dp[i][j]: i번째 앱까지 고려했을 때 j 비용으로 확보할 수 있는 최대 메모리
# 비용의 최대값은 모든 비용의 합으로 초기화
max_cost = sum(costs)
dp = [[0] * (max_cost + 1) for _ in range(n + 1)]
# 결과값 초기화
res = max_cost
# 다이나믹 프로그래밍 수행
for i in range(1, n + 1):
for cost in range(max_cost + 1):
now_memory = memories[i]
now_cost = costs[i]
if cost < now_cost:
dp[i][cost] = dp[i - 1][cost] # 현재 앱을 비활성화하지 않는 경우
else:
dp[i][cost] = max(dp[i - 1][cost], dp[i - 1][cost - now_cost] + now_memory) # 앱 비활성화 여부 선택
# 필요한 메모리 확보 조건을 만족하는 경우 최소 비용 갱신
if dp[i][cost] >= m:
res = min(res, cost)
# 결과 출력
print(res)
반응형
'백준 문제풀이 코드저장소 > Gold' 카테고리의 다른 글
Baekjoon 1644. 소수의 연속합 / Python (1) | 2024.07.03 |
---|---|
Baekjoon 17386. 선분 교차 1 / Python (0) | 2024.07.03 |
Baekjoon 9466. 텀 프로젝트 / Python (0) | 2024.07.02 |
Baekjoon 4386. 별자리 만들기 / Python (2) | 2024.07.01 |