-문제:https://www.acmicpc.net/problem/11052
-정답풀이
i개의 카드를 구매하는 방법은 (이전에 i-j개 산 것 더하기 j개가 담긴 카드팩을 사는 방법)과 그냥 i개 사는 것이 있고
이 중에 최댓값을 구하면 된다
n=int(input())
dp=[0]*(n+1)
data=[0]+list(map(int,input().split()))
dp[1]=data[1]
for i in range(2,n+1):
for j in range(1,i+1):
dp[i]=max(dp[i],dp[i-j]+data[j])
print(dp[n])
-틀린풀이
처음에는 주어진 n의 약수들로만 계산헀을 때, 최댓값을 구할 수 있다고 생각했는데
마지막 예제에서 내가 생각한 방법으로는 16이 나오는데, 답은 18이다.
이걸보고 약수로만 하는 것이 아니고, 더하기를 통해서 최댓값을 구해야한다고 생각했다.
n=int(input())
data=[0]+list(map(int,input().split()))
answer=0
for i in range(1,n+1):
if n%i ==0:
answer=max(answer,data[i]*(n//i))
print(answer)
'백준 > DP' 카테고리의 다른 글
[dp/백준] 9461번: 파도반 수열 (0) | 2022.06.06 |
---|---|
[dp/백준] 1904번: 01타일 (0) | 2022.06.05 |
[dp/백준] 1010번: 다리 놓기 (0) | 2022.06.05 |
[dp/백준] 10844번: 쉬운 계단 수 (0) | 2022.06.03 |
[dp/백준] 2156번: 포도주 시식 (0) | 2022.06.03 |