If you mean by sub solutions the solutions of the subproblems then typically they overlap. That's the reason for dynamic programming, that you break down a complex problem into simpler subproblems, which however depend on each other. Overlapping subproblems can be solved e.g. with a recursive approach (e.g. Fibonaccci sequence).