반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 컴퓨터 그래픽스
- Support Vector Machine
- CPP
- 비용함수
- SVM
- logistic regression
- OpenGL
- SGD
- neural network
- 신경망
- 백준
- Regularization
- 인공지능
- C++
- cs231n
- CNN
- 머신러닝
- petal to metal
- Unsupervised learning
- 컴퓨터 비전
- pre-trained
- 파이썬
- recommender system
- Vision
- Computer Vision
- 딥러닝
- 그래픽스
- 추천 시스템
- 로지스틱 회귀
- Kaggle
Archives
- Today
- Total
kwan's note
백준 12865번 평범한 배낭(냅색) 파이썬 (python code) 본문
반응형
난이도: 골드5
번호: 12865번
가장 평범한 dp 문제중 하나인 냅색 knapsack 문제이다.
그리디하게 풀려다가 안돼서 찾아보니 점화식을 이용한 다이나믹프로그래밍 문제인걸 알게되었다.
그래서 금방 풀줄 알았는데 너무 오래걸렸다.
중간에 작성한 오답코드
from sys import stdin
N, K = map(int,stdin.readline().split())
WV=[0]*(N+1)
for i in range(1,N+1):
WV[i] = list(map(int,stdin.readline().split()))
knapsack=[[0]*(K+1)]*(N+1)
for i in range(1,N+1):
for j in range(1,K+1):
knapsack[i][j]=max(knapsack[i-1][j], knapsack[i-1][j-WV[i][0]]+WV[i][1]) if j>=WV[i][0] else knapsack[i-1][j]
print(knapsack[N][K])
처음에는 방법을 몰라서 헤메다가 나중에
knapsack[i][j] = max(knapsack[i - 1][j], knapsack[i][j - WV[i][0]] + WV[i][1]) if j>=WV[i][0] else knapsack[i - 1][j]
여기서 문제가 발생한 줄 알고 if else로 나눴는데도 오답이 나왔다.
문제에서 각 아이템은 한번만 쓸 수 있다는것을 인지하지 못해서 위와같이 풀었는데
한 아이템은 하나밖에 사용하지 못하므로 i-1과 비교해야 했다.
if j>=WV[i][0]:
knapsack[i][j] = max(knapsack[i - 1][j], knapsack[i - 1][j - WV[i][0]] + WV[i][1])
else:
knapsack[i][j] = knapsack[i - 1][j]
그럼에도 틀려서 확인해보니 knapsack을
knapsack=[[0] * (K + 1)]*(M+1)
로 지정하면 행의 주소를 복사해버린다는 것을 인지하지 못하다가
마지막에 다른 코드를 보고
knapsack=[[0] * (K + 1) for _ in range(N + 1)]
로 변경하였다.
정답코드
from sys import stdin
N, K = map(int,stdin.readline().split())
WV=[0]*(N+1)
for i in range(1,N+1):
WV[i] = list(map(int,stdin.readline().split()))
knapsack=[[0] * (K + 1) for _ in range(N + 1)]
for i in range(1,N+1):
for j in range(1,K+1):
if j>=WV[i][0]:
knapsack[i][j] = max(knapsack[i - 1][j], knapsack[i - 1][j - WV[i][0]] + WV[i][1])
else:
knapsack[i][j] = knapsack[i - 1][j]
print(knapsack[N][K])
반응형
'Algorithm > python' 카테고리의 다른 글
백준 11053번 가장 긴 증가하는 부분 수열 (Lis) 파이썬 (python code) (0) | 2021.01.15 |
---|---|
백준 1149번 RGB거리 파이썬 (python code) (0) | 2021.01.14 |
백준 1003번 피보나치 파이썬 (python code) (0) | 2021.01.14 |
백준 11047번 동전0 파이썬 (python code) (0) | 2021.01.14 |
백준 7576번 토마토 파이썬 (python code) (0) | 2021.01.14 |