Data Structures & Algorithms

[Algorithms] 동적 계획법(Dynamic Programming)-최대 점수 구하기(냅색 알고리즘)

숄구-ml 2022. 6. 9. 15:10

 

  • 앞에서 진행했었던 가방문제와 동일하다고 생각할 수 있으나, 한 유형당 문제 한 개만 풀 수 있다는 점이 다르다. 가방문제에서는 보석 각 타입을 무한정으로 이용할 수 있었다 
  • 상황을 이해하기 위해 우선 2차원 배열로 이해해보자 

  • 문제를 중복해서 풀지않기 위해서 2차원 배열로 풀어냈는데, 이는 1차원 배열로도 설명이 가능하다

 

 

 

위의 1차원 배열 코드 구현은 공간복잡도 시간복잡도 모두 고려했기 때문에 아주 최적이다

 

1
2
3
4
5
6
7
8
9
10
11
12
13
if __name__=='__main__':
 
    n, m = map(int, input().split())
    dyn = [0]*(m+1)
 
    for i in range(1, n+1):
        scr, min = map(int, input().split())
        for j in range(m, min-1-1):
            dyn[j] = max(dyn[j], dyn[j-min]+scr)
 
    print(dyn[m])
 
 
cs
728x90