와 미챠따.. 첨으로 답안보고 풀었다
관건은, d[x]가 최대금액을 보장하는 놈이 들어있고, 카드팩을 돌면서 비교하면 됨.
규칙을 찾기 위해 적어보자면,
p[x] = y
x 카드 갯수
y 금액
d[1] = p[1]
d[2] = max(p[1], p[2])
d[3] = max(p[1]+p[2], )
d[4] = max(d[3]+p[1], d[2]+p[2])
d[5] = max(d[4]+p[1], d[3]+p[2])
max안에 들어갈 내용들만 봤을 때, d와 p의 인덱스들의 합이 d의 인덱스임을 알 수 있었음
import sys
input = sys.stdin.readline
n = int(input())
d = [0] * 1001
p = [0] +list(map(int, input().split()))
for x in range(n+1):
d[x] = p[x]
for y in range(1, x):
d[x] = max(d[y] + p[x-y], d[x])
print(d[n])
'⚡️algorithm' 카테고리의 다른 글
[DP] 백준 11051. 이항계수2 (feat. 파스칼의 삼각형) (0) | 2022.04.20 |
---|---|
[DP] 백준 2294. 동전2 - ing (0) | 2022.04.19 |
[DP] 백준 1699. 제곱수의 합 (0) | 2022.04.19 |
[DP] 백준 1904. 01타일 (0) | 2022.04.18 |
[DP] 백준 1463. 1로 만들기 (0) | 2022.04.16 |