Quick revision

cache = [
    [
        [-1] * (N+1) # k
        for _ in range(N) # j
    ] for _ in range(N) # i
]

Absolutely, Jing. Let’s build your mental toolbox of cache/memo templates β€” from 1D to 3D β€” including strong hire variations like value initialisation, list of objects, and DP usage patterns.


πŸ”Ή 1D List

βœ… List of default values:

dp = [0] * n

βœ… With sentinel / infinity:

dp = [float('inf')] * n

βœ… For visited flags / booleans:

visited = [False] * n

πŸ”Ή 2D List (List of Lists)

βœ… Common pattern:

dp = [[0] * m for _ in range(n)]  # n rows, m cols
dp = [[0 for _ in range(m)] for _ in range(n)]