Algorithm Design By Dynamic Programming Examples