ડાયનેમિક પ્રોગ્રામિંગ, મૂળભૂત સિદ્ધાંતો