DP와 greedy 모두 **최적 부분 구조(optimal substructure)**가 필요합니다. 차이는 이렇습니다. greedy는 추가로 greedy-choice property(탐욕 선택 속성)(국소 최적이 전역 최적임)를 요구하는 반면, DP는 여러 선택지와 겹치는 부분 문제를 고려해야 할 때 필요합니다.
구별
text
최적 부분 구조가 있는가? -- 둘 다 필요
+ 탐욕 선택 속성이 성립하는가? -> GREEDY (빠름, 선택의 한 번 순회)
+ 여러 부분해를 비교해야 / 겹치는가? -> DYNAMIC PROGRAMMING
전형적 대비: 거스름돈 만들기
python
():
INF = ()
dp = [] + [INF] * amount
a (, amount + ):
c coins:
c <= a:
dp[a] = (dp[a], dp[a - c] + )
dp[amount]
min_coins(, [, , ])
