DAC
In Divide and conq we divide the big problem into smaller problems until termination or we can say recursively until termination condition. In this technique we do not check all the possibilities, this is why it may or may not give the correct answer everytime.
Dynamic Programing
In dynamic programing we check all the possibilities(it is all most brutforce). We only calculate the value of distinct function calls and stores the value of that function calls into a table, this is why it is slow at start, after calculating all the distinct function calls dynamic programming is very fast as it just has to took the stored value from the table and puts its value rather then solving the same problem again.
Dynamic programming is useful when we have repeated function calls and worst when we have distinct function calls.
The best example to understand this concept is Fibonacci series in DAC time complexity is 2^n but in Dynamic programing it is o(N) because of repeated function calls.