Practice suggestions
Write the state down as a sentence before you write any arithmetic. “How many units are still unspent when this activity decides” is a state; “where I am” is not, until you have said what “where” has to include. Every wrong answer on this course that survives every check comes from this step, and the check that catches it is not arithmetic — it is asking whether two situations the state calls identical really can be finished the same way.
Fill the table from the end and never revise a value. If you find yourself wanting to go back and change f at a node you have already written, the ordering is wrong or the state is: the recursion works precisely because a value depends only on values already settled. The labs print the table in the order it was filled for that reason.
Reconstruct the decisions and then price them independently. A value table is a claim about a number; the plan it describes is a different claim, and the second one is the one a reader can act on. Every lab here re-prices what its recursion returned, and two of them would have shipped a wrong plan beside a right number without it.
Keep every tie. When two continuations are worth the same, a recursion that records the first one found still reports the right value and reports one of the right answers as though it were the only one. The lab of “Filling the Table from the End” carries all of them, and the example with three optimal routes is one arc cost away from the example with one.
Before believing any optimum here, say what the model left out. The arithmetic on this course is exact and the enumerations are exhaustive, so nothing on the page will ever disagree with the answer. That is exactly why the modelling question has to be asked out loud: an exhaustive search over the wrong set of plans is a proof about the wrong problem.
What it does not cover
Infinite-horizon policy iteration, and the average-reward criterion. Both need a Markov chain already defined — a transition matrix, a steady state, a class structure — and Markov Chains, Decisions and Queues builds all three. What this course does instead is the discounted fixed point on a chain small enough to solve by row reduction, which is as much of the infinite horizon as a course with no chains behind it can honestly claim.
A continuous state, and the discretisation that would be needed to handle one. Every state here is one of a listed few and every quantity is rational. Dynamic programming over a continuous resource is a real subject whose interesting part is the discretisation error, and doing it badly in passing would be worse than naming it.
The economic order quantity and continuous-review stock policies. The lot-sizing problem here has discrete periods, a known demand in each of them, and an exact answer by recursion; Inventory Models takes the other road, with a rate rather than a schedule, and finds Q* by a discriminant. The two answer different questions and the pair is worth meeting as a pair.
Dynamic programming as an algorithmic technique — memoisation, tabulation, the distinction between top-down and bottom-up, and the complexity arguments around them. Algorithms and Complexity owns that framing and states it well. Here the recursion is a way of writing down what an optimal plan must satisfy, and the enumeration beside it is an oracle rather than a rival algorithm.
Stochastic programming with recourse, and anything that puts a probability inside a linear programme. It is the natural meeting point of the first half of this path and this course, it is genuinely useful, and it needs both scenario trees and a decomposition method; naming it is as far as this course goes.
The one limit this course prints and does not prove. The secretary problem’s n/e is where the optimal r sits in the limit, and the page holds it against the number you reject, which is r − 1 — at a hundred candidates, 36.7879 against 37. The argument that it is the limit is an asymptotic one this path has not built. It appears on the page labelled as rounded, beside an exact table of fractions that never needs it, and how many to reject is read off that table rather than off the limit.