Jupyter notebook has theory related to dynamic programming and also example of dynamic programming with fibonacci number generation
Important point to remmeber about Dynamic programming is that, the name is misleading, giving a feeling that it is something very complicated. But it's not.
https://www.youtube.com/watch?v=OQ5jsbhAv_M - MIT OCW lecture