Dynamic programming is a method used in mathematics and computer science to solve optimization problems with overlapping subproblems. The basic idea is to decompose the original problem into similar subproblems, and in the process of solving, the solution of the original problem is obtained by solving the subproblems. The idea of dynamic programming is the basis of many algorithms and is widely used in computer science and engineering. Famous application examples include: solving the shortest path problem, knapsack problem, project management, network traffic optimization and so on.