1Start by writing the top-down recursive solution with memoization, then convert to bottom-up iteratively.
2Define dp[i] clearly — what does it represent? "Minimum cost to reach step i" or "maximum profit at day i".
3When dp[i] depends on dp[i-1] and dp[i-2] only, replace the array with two variables (prev1, prev2).
4For "can we reach the end?" problems, initialize dp[0] = true and propagate reachability forward.