Am I understanding this correctly that dynamic programming == breaking a problem into smaller (reoccurring) sub-problems and using caching to improve performance?
That is conceptually how dynamic programming works, but in practice the way you build the cache is from the bottom up rather than from the top down. It’s a bit like how you can implement computation of the Fibonacci sequence in a top-down manner using a recursive function with caching, but it is a lot more efficient to instead build it in a bottom-up manner.
“Daemon”, for a process that is detached from your terminal
That’s factually incorrect. Daemons are often spawned from “early” processes whose ancestors are not TTYs.
The only application I can still remember is the backpack problem