일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 딥러닝
- 경사하강법
- 지도학습
- 자바시작하기
- 자바
- 머신러닝
- 머신러닝 강좌
- 자바강좌
- 비용함수
- JAVA강좌
- acmicpc.net
- 머신러닝공부
- java
- 파이썬강의
- 선형회귀
- 딥러닝공부
- unsupervised learning
- c언어 오목
- Gradient Descent
- 효묘블로그
- 머신러닝 강의
- 백준 알고리즘
- C언어
- python강좌
- feature scaling
- supervised learning
- Python강의
- 파이썬강좌
- 비지도학습
- 인공지능
Archives
- Today
- Total
컴공과컴맹효묘의블로그
백준 알고리즘[11052]카드 구매하기 python코드 본문
반응형
문제 사이트 : https://www.acmicpc.net/problem/11052
생각의 시퀀스
각각 다르거나 같은 개수의 카드가 들어있는 카드팩을 샀을 때, 모든 카드의 합이 N이 되는 경우의 최대값을 구하라.
처음 든 생각은 기계적으로 튀어나온 dp[i] = max(arr[i], dp[i-1]+arr[0])
arr이 카드팩 비용이고 dp는 i-1개의 카드를 산 경우 최대 비용.
그러므로 dp[0] = arr[0]
하지만 위 코드는 동작하지 않았고 나는 멍청했다..
위 점화식에서 dp[i-j]+arr[j-1]를 쓴다면 시간 오버가 될거라 생각함.
그래서 멀리 돌아돌아 카드팩을 사는 모든 경우의 수를 재귀식으로 돌리고, 카드의 합이 N이 될때마다 max인지 구하는 식으로 생각해봤는데 이게 더 오래걸릴거같음.
그래서 다시 처음으로 돌아와서 점화식 이용함.
코드
마침 pycharm이 켜있길래 python으로 구현함
n = int(input())
arr = input().split()
for i in range(len(arr)):
arr[i] = int(arr[i])
dp = [0]
#dp[i] = max(p[i], dp[i-1]+p[i])
#일단 카드 팩을 구매할 수 있는 모든 경우의 수 탐색하는 방법을 구상해보자
# n이 1이라면, 1
# n이 2라면, 1+1, 2
# n이 3이라면, 1+1+1, 2+1, 3
# n이 4라면, 1+1+1+1, 2+1+1, 2+2, 3+1, 4
# 이떄 1번 방법이 max일까 2번 방법이 max일까 3번이 max일까 4번이 max일까?
# n<= 1000, p_i= 10000
# ..이랃ㄴ 첨검롱 해본ㅁㅇ
dp[0] = arr[0]
for i in range(1, n):
max_val = 0
for j in range(1, i+1):
max_val = max(max_val, dp[i-j]+arr[j-1])
dp.append(max(arr[i], max_val))
print(dp[-1])
반응형
'알고리즘 > 백준' 카테고리의 다른 글
백준 알고리즘[2410] 2의 멱수의 합 C++ (0) | 2020.06.22 |
---|---|
백준 알고리즘[16112]-5차 전직 (1) | 2020.06.21 |
백준 알고리즘[18825] 눈치게임 A+B! A-B! A+B! 터렛! A+B! 피보나치 함수! A+B! A-B! A+B! 어린 왕자! A+B! ACM Craft! A+B! A-B! A+B! 습격자 초라기! A+B! 벡터 매칭! A+B! A-B! A+B! A/B! A+B! 터렛! A+B! A-B! A+B! 분산처리! .. (0) | 2020.04.18 |
백준 알고리즘[1043]-거짓말 (0) | 2020.04.17 |
백준알고리즘풀이[11729] 히노이 탑 이동 순서 (0) | 2020.03.01 |
Comments