Thanks for the detailed explanation. It helped a lot, especially what the tbl actually holds.
I've read your code again and I get how it works, but it still feels kinda strange that we are considering values outside of range of a and b, and that we are marking them as correct. Like in first row of the example ???.### 1,1,3, there is no spring at 8 and no group at 3 but we are marking (8,3) and (7,3) as correct. In my mind, first position that should be marked as correct is 4,2, because that's where group of 3 can fit.
I'm struggling to fully understand your solution. Could you tell me, why do you return 1 when at the end of a and b ? And why do you start from size + 1?