Блог пользователя fiter

Автор fiter, 9 лет назад, По-русски

Помогите пожалуйста решить http://www.e-olimp.com/ua/problems/1405 . Я написал перебор с дп каким-то, но заходит только на 34.

  • Проголосовать: нравится
  • +1
  • Проголосовать: не нравится

»
9 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Вот так надо ссылку давать.

  • »
    »
    9 лет назад, # ^ |
    Rev. 3   Проголосовать: нравится +1 Проголосовать: не нравится

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

    Затем перебираем все множества которые могут образовывать две стороны. Вложенный перебор ищет из множества оставшихся палочек такое подмножество которое тоже может образовывать две другие параллельные стороны.
    Вложенный перебор подмножеств требует примерно 3^n времени, если перебирать во втором цикле только подмножества первого. for (int j = i; j > 0; j = (j - 1) & i)