https://www.acmicpc.net/problem/16194
점화식 dp[i] 를 구하기 위해선
p[1] + dp[i-1]
p[2] + dp[i-2]
p[3] + dp[i-3]
...
p[j] + dp[i-j]
까지 구해야 하며, 주어진 문제조건에 따라 이 중 에서 가장 작은 값이 dp[i]가 된다.
다시 말해, dp[i] = min(p[1] + dp[i-1], p[2] + dp[i-2], p[3] + dp[i-3], ... , p[j] + dp[i-j])
여기서 범위는 1<=i<=n, 1<=j<=i 이므로 이중 포문을 이용한 Bottom-up으로 문제를 해결한다.
1
2
3
4
5
6
7
8
9
10
11
|
n = int(input())
p = [0]+list(map(int, input().split()))
dp = [0]*(n+1)
for i in range(1,n+1):
min_val = 987654321
for j in range(1,i+1):
min_val = min(min_val, p[j]+dp[i-j])
dp[i] = min_val
print(dp[n])
|
cs |
728x90
반응형
'Problem Solving > BOJ' 카테고리의 다른 글
[Python]10844. 쉬운 계단 수 (0) | 2019.04.04 |
---|---|
[Python]15990. 1,2,3 더하기 5 (2) | 2019.04.03 |
[Python]1463. 1로 만들기 (0) | 2019.04.02 |
[Python]3055. 탈출 (0) | 2019.04.02 |
[Python]2206. 벽 부수고 이동하기 (0) | 2019.04.02 |
댓글