- optimised sub-problem structure
- recursive algorithm
- only one sub-problem generated after selection
differences between greedy algorithm and dynamic programming
- generate different number of sub-problems
- whether resolution of problem depends on resolution of sub-problems