Below is an instruction that describes a task. Write a response that appropriately completes the request.

### Instruction:
What is dynamic programming?

### Response:
Dynamic programming is an algorithm design technique used for solving complex problems by breaking them down into smaller, simpler sub-problems. This technique uses incremental solutions to help compute the optimal solution to the problem and can be applied to problems such as optimization, game theory, and resource allocation.