Cometin'

BOJ-1535 - Python

2021-01-18 at Algorithm category

n개의 값과 무게를 입력받은 후 가방의 크기가 99일 때 최대 값을 출력하는 문제. 이중 반복문을 이용하여 담을 수 없을 때 같은 무게, 저번 물건의 값을 할당, 담을 수 있을 때 같은 무게, 저번 물건의 값과 현재 물건의 값 + 반복중인 무게 - 현재 물건의 무게의 저번 물건의 값 중 큰 것을 할당하여 배열의 마지막 값을 출력하여 풀었다. n이 1이며 해당 무게가 99를 넘는 경우를 예외처리하지 못하여 여러번 틀린 문제.

def solve(n):
    weight = list(map(int, input().split()))
    value = list(map(int, input().split()))
    ans = [[0 for _ in range(100)] for _ in range(n)]

    if n == 0:
        return 0
    if n == 1:
        return value[0] if weight[0] <= 99 else 0

    for v in range(n):
        for w in range(100):
            val = value[v]
            cost = weight[v]
            if w < cost:
                ans[v][w] = ans[v - 1][w]
            else:
                ans[v][w] = max(ans[v - 1][w], val + ans[v - 1][w - cost])

    return ans[n - 1][99]

n = int(input())
print(solve(n))

hyesungoh

Personal blog by hyesungoh.

I like to share my knowledge for those who wandering in issue.