문제 설명
•
필요한 메모리 바이트를 확보하기 위한 최소 비용을 구하는 문제
◦
개의 앱은 각각 메모리 과 비활성화하는데 드는 비용 를 가지고 있음.
예제 입력/출력
•
입력1
5 60
30 10 20 35 40
3 0 3 5 4
Plain Text
복사
•
출력1
6
Plain Text
복사
제약 조건
•
•
•
물건에 대한 정보
◦
물건의 메모리
◦
비활성화하는데 드는 비용
문제 풀이
풀이1 브루트 포스 -
풀이2 그리디
풀이3 DP -
풀이 코드
•
Bottom-Up 방식의 구현
INF = int(1e12)
# 입력값
N, M = map(int, input().split())
memories = [0] + list(map(int, input().split()))
costs = [0] + list(map(int, input().split()))
MAX = sum(costs) + 1
# DP 테이블 갱신
dp = [[0 for _ in range(MAX)] for _ in range(N + 1)]
for n in range(1, N + 1):
for c in range(MAX):
dp[n][c] = dp[n - 1][c]
if c - costs[n] >= 0:
dp[n][c] = max(dp[n][c], dp[n - 1][c - costs[n]] + memories[n])
# 정답 출력
ans = INF
for c in range(MAX):
if dp[N][c] >= M:
ans = min(ans, c)
print(ans)
Python
복사
Top-Down 방식의 구현