Dynamic programming is basically optimization rather than plain repetition. Wherever we see repetitive solutions that call repeatedly for the same inputs, we can optimize it using dynamic programming. The idea is to simply store the results of sub-problems, so that we cannot recalculate them later when needed. This general optimization reduces the complexity of time from frequent to plural.