advanced

Dynamic programming

Overlapping subproblems, optimal substructure, memoization, tabulation и проектирование state.

Dynamic programming применим, когда subproblems overlap и optimal answers строятся из smaller optimal answers. Сложность не в table, а в выборе state, который хранит все нужное и ничего лишнего. Memoization начинается с recursion, а tabulation заполняет states в dependency order.

На интервью: Интервьюеры ожидают recurrence, base cases, state dimensions, transition cost и итоговую complexity.

Типовые ошибки: Не форсируйте DP, когда greedy или sliding window достаточно. State explosions появляются, когда вы включаете raw history вместо compressed facts. Следите за modulo и reconstruction requirements.

Чеклист:

  • Определите dp state.
  • Запишите recurrence.
  • Задайте base cases.
  • Посчитайте dimensions times transition cost.