Изменения

Перейти к: навигация, поиск

Задача коммивояжера, ДП по подмножествам

3 байта убрано, 21:39, 15 января 2015
Оптимизация решения
Сама динамика будет такая: <br>
<tex>d[mask][i] = 1</tex>, если <tex>|mask| = 1</tex> и <tex>mask[i] mask_i = 1</tex> <br><tex>d[mask][i] = OR_{mask[j]=1, (j, i) \in E}d[mask \oplus 2^i][j]</tex>, если <tex>|mask| > 1</tex> и <tex>mask[i]mask_i= 1</tex> <br>
<tex>d[mask][i] = 0</tex> во всех остальных случаях <br>
Тогда динамика перепишется следующим образом: <br>
<tex>d'[mask] = 2^i</tex>, если <tex>|mask| = 1</tex> и <tex>mask[i] mask_i = 1</tex> <br>
<tex>d'[mask]=\sum_{j \in [0..n-1]} 2^i \cdot ((d[mask \oplus 2^i] \& M_i) \neq 0?1:0) </tex>, если <tex>|mask|> 1</tex> <br>
<tex>dp'[mask] = 0</tex> во всех остальных случаях <br>
Анонимный участник

Навигация