The dynamic programming table only has 2 rows. I finally figured out what it looked like thanks to this fantastic example on wikipedia here (don't read the code). The gif towards the end is a perfect depiction of the table.
The way it looks is actually very simple and can be summed up at this: For each state (such as ill or healthy in the linked example) you only care about which previous state is the most probable. If you're picking a state that isn't the same as your current state then you have to multiply it by the odds of changing state.
For a quick example imaging you know all the probabilities for how feeling "dizzy, cold, and good" all map to "healthy or sick". Then a patient comes in one day as good, and the next as dizzy. The table would first look at the first day and fill in the probability for both the "healthy" row, and the "sick" row. The healthy row would have a much higher probability. Then the table would go to the next day and fill in each row.
For the healthy row the table would say to itself "hm, on the previous day healthy was much more likely than sick, and if I pick sick I have to further reduce the odds by multiplying by the the odds of transitioning, so I'll pick healthy". And for the sick row it would say "well, the odds of healthy yesterday outweigh the odds of sick, even after I multiply it by the transitioning odds, so I'll pick that.".
And That's all there is to it! Here's what that would look like in table form:
Healthy row: [day1: high chance of healthy because patient felt good], [day2: patient felt dizzy, low chance of healthy. Previous day was probably healthy, and no transition was made]
Sick row: [day1: low chance of sick, because patient felt good], [day2: high chance of sick, previous day was probably healthy, even though we have to factor in odds of transitioning]
And so the most probable case is healthy day1, sick day2.
youtube might be the way to go: https://www.youtube.com/results?search_query=hidden+markov+viterbi