Keep alternatives when a local choice lacks a proof
Greedy algorithms discard alternatives after a local decision. Dynamic programming compares alternative transitions while reusing results of overlapping subproblems. Use the problem's structure to decide, not the desired implementation length.
For coins [1,3,4] and target six, define dp[a] as the fewest coins totaling a. Then dp[0]=0, and every positive state considers 1+dp[a-coin] for allowed reachable predecessors. This finds two coins where largest-first greedy finds three.
Weighted interval scheduling is another contrast. Earliest finish maximizes the count of compatible intervals, but weights require comparing taking an interval plus its compatible predecessor's optimum against skipping it.
Exercise
Implement greedy and DP coin solvers and enumerate small targets to find disagreements. Return an explicit unreachable result when denominations cannot form an amount.
Check: dynamic programming also needs a correct state definition and transition proof. A table does not make an incorrect recurrence correct, and greedy is preferable when its proof gives a simpler efficient solution.