Dynamic programming problems require an optimal substructure which are typically solved using greedy. DP solutions and greedy solutions are usually quite similar.