728x90
문제
코드
def min_cost_to_free_memory(N, M, memories, costs):
max_cost = sum(costs)
dp = [0] * (max_cost + 1)
for i in range(N):
memory = memories[i]
cost = costs[i]
for j in range(max_cost, cost -1, -1):
dp[j] = max(dp[j], dp[j-cost] + memory)
for k in range(max_cost + 1):
if dp[k] >= M:
return k
return -1
N,M = map(int, input().split())
memories = list(map(int, input().split()))
costs = list(map(int, input().split()))
print(min_cost_to_free_memory(N,M,memories,costs))
설명
복잡해 보이는데 이해하면 쉬운 문제이다.
문제에서 구해야 하는 것은 사용 가능한 메모리
위 메모리를 찾기 위해 유지비용(?)을 dp에 요리조리 잘 요리하면 된다.
역순으로 하는 이유는 이 전 dp 값을 참조 할 때 현재 메모리가 더해진 값을 사용하는 것을 방지하기 위함이다
예시
'자료구조&알고리즘 > 백준' 카테고리의 다른 글
백준 | [파이썬 Python] 1294 문자열 장식 (0) | 2024.11.05 |
---|---|
백준 | [파이썬 Python] 2206 벽 부수고 이동하기 (0) | 2024.08.30 |
백준 | [파이썬 Python] 11049 행렬 곱셈 순서 (0) | 2024.06.10 |
백준 | [파이썬 Python] 11066 파일 합치기 (0) | 2024.06.10 |
백준 | [파이썬 Python] 11286 절댓값 힙 (0) | 2024.06.02 |