Please subscribe to the official Codeforces channel in Telegram via the link https://t.me/codeforces_official. ×

Mahilewets's blog

By Mahilewets, history, 7 years ago, In Russian

Наблюдение, касающееся динамического программирования, которое все, скорее всего, уже давно сделали.

Вместо того чтобы строить массив вида DP[dim_1][dim_2][dim_3]...[dim_N], часто бывает более удобно и понятно строить явным образом граф вида vector <struct {int state_1, state_2, state_3, ..., state_N;} >.

Особенно это удобно и понятно, когда количество измерений больше двух.

Тогда, например, можно не использовать громоздкие конструкции, чтобы инициализировать значения по умолчанию, а просто воспользоваться значениями для полей структуры по умолчанию.

Также это позволяет обойтись вообще без написания циклов в явном виде, всё можно сделать при помощи рекурсивной функции обхода графа.

Таким образом можно добиться даже экономии памяти, если создавать новое состояние непосредственно перед тем, как обход графа собирается пойти в него.

Пример, где такой подход позволил избежать громоздких выкладок с многомерным массивом:

http://acm.timus.ru/problem.aspx?space=1&num=1501 http://ideone.com/tm1TcB

  • Vote: I like it
  • +12
  • Vote: I do not like it