문제 바로가기:https://www.acmicpc.net/problem/11052
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int,input().split()))
arr.insert(0,0)
dp = [0] * (n+1)
for i in range(1,n+1):
for j in range(1,i+1):
dp[i] = max(dp[i],arr[j]+dp[i-j])
print(dp[n])
당시 참고했던 블로그:https://jyeonnyang2.tistory.com/56
DP...점화식 세우는게 너무 어렵다.
결국 오늘도 답 먼저 봐버렸다.
하지만 답만 보고 넘어가는 것은 의미가 없을 것 같아 그림을 그리며 확실히 머리에 박아두었다.
다음주에 한 번 더 풀어봐야지
문제 바로가기:https://www.acmicpc.net/problem/16194
import sys
input = sys.stdin.readline
n = int(input())
arr = list(map(int,input().split()))
arr.insert(0,0)
dp = [10001] * (n+1)
dp[0] = 0
for i in range(1,n+1):
for j in range(1,i+1):
dp[i] = min(dp[i],arr[j]+dp[i-j])
print(dp[n])
바뀐건
1. max를 min으로 바꾼 것과,
2. dp를 10001로 초기화했다는 것과,
3. 0번째 dp를 0으로 선언해놓았다는 것.
그래도 두번째 문제는 첫번째 문제에서 조금만 변형하면 풀 수 있는 문제라고 생각하여 답을 보진 않고 직접 풀어보았다.
약간 끼워맞추기식으로 푸는 것 같은 느낌이지만...
그게 DP인듯하다. DP는 아직 어렵다...