알고리즘(python)/기본

[Python]동적계획법 백준 12865

개발일기 2020. 1. 13. 23:42
반응형

   문제

   https://www.acmicpc.net/problem/12865




왠지 실생활에서 사용할수도 있을거 같은 문제이다.

최대가치를 위해 제한된 공간을 어떤식으로 채울것인가.

쉬울줄 알았는데 아직 컴퓨터적으로 생각하는것이 많이 부족한거같다.

새로운 무게의 물품이 들어왔을때 기존 무게와 더해서 들어갈수 있는곳이 있으면 물건의 

가치의 최대값을 비교하여 갱신해준다.

구현하는 것에서 좀 해맸다. 배열 특히 2차원배열이 나오면 헤메는 경우가 많은것 같다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sys
N, K = map(int, input().split())
result = [-1 for _ in range(K + 1)]
result[0]=0#밑에서 해당숫자는 넣어주기 위해서 ex) 4=4+0
stuff=[list(map(int,sys.stdin.readline().split())) for _ in range(N)]
for i in range(N):
    for j in range(K-stuff[i][0],-1,-1):
        if result[j]==-1:
            continue
        else:
            result[stuff[i][0]+j]=max(result[j]+stuff[i][1],result[stuff[i][0]+j])
            #이전 결과값중 더할수 있는 무게가 있으면 
   #결과[무게합]=최대값(무게합에 저장된 가치의 값 과 현재 무게 + 더할수 잇는 무게에 있는 벨류값)
 
print(max(result))

cs


반응형