[python 파이썬] 백준 1535번 안녕

2021. 2. 9. 00:10Algorithm/BOJ

반응형
 

1535번: 안녕

첫째 줄에 사람의 수 N(<=20)이 들어온다. 둘째 줄에는 각각의 사람에게 인사를 할 때, 잃는 체력이 1번 사람부터 순서대로 들어오고, 셋째 줄에는 각각의 사람에게 인사를 할 때, 얻는 기쁨이 1번

www.acmicpc.net

#틀림
n=int(input())
power=99

L=list(map(int,input().split()))
J=list(map(int,input().split()))
knapsack=[[0 for _ in range(power+1)] for _ in range(n+1)]

# print(knapsack)
for i in range(n):
  for j in range(power+1):
    if j<=L[i]:

      # knapsack[i][j]=max(knapsack[i-1][j],knapsack[i-1][j-L[i]]+J[i])
    else:
      # knapsack[i][j]=knapsack[i-1][j]
      knapsack[i][j]=max(knapsack[i-1][j],knapsack[i-1][j-L[i]]+J[i])
print(knapsack)
 
n=int(input())
L = list(map(int, input().split())) # 잃는 체력을 저장하는 리스트

L.insert(0, 0) # 순서의 헷갈림 방지를 위한 0번째 원소에 0 삽입

J = list(map(int, input().split())) # 얻는 기쁨을 저장하는 리스트

J.insert(0, 0)


K = [[0 for col in range(101)] for row in range(21)]


def knapsack(n, m, weight, price): #knapsack 알고리즘 함수
    for i in range(1, n+1):
        for j in range(1, m+1):
            if weight[i] > j:
                K[i][j] = K[i-1][j]
            else:
                K[i][j] = max(K[i-1][j-weight[i]] + price[i], K[i-1][j])
                #MAX(현재 보석들의 가치+ 남은 가방 크기 만큼 나머지 보석을 넣을 때 최대 가치, 이전까지 구해둔 보석들의 가치) 
                #처음의 경우엔 MAX(가방에 들어있던 보석(1)을 빼고, 보석(2)을 넣을때의 가치, 이전 보석(1)의 가치)
    return K[n][m]

 
print(knapsack(n, 99, L, J))

 

 

blog.naver.com/kenshi3068/221906793520

반응형