Помогите пожалуйста решить http://www.e-olimp.com/ua/problems/1405 . Я написал перебор с дп каким-то, но заходит только на 34.
№ | Пользователь | Рейтинг |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
Страны | Города | Организации | Всё → |
№ | Пользователь | Вклад |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
Помогите пожалуйста решить http://www.e-olimp.com/ua/problems/1405 . Я написал перебор с дп каким-то, но заходит только на 34.
Название |
---|
Вот так надо ссылку давать.
Сначала для каждого подмножества палочек посчитаем могут ли они образовывать две параллельные стороны прямоугольника используя все палочки этого подмножества. Это делается перебором всех подмножеств, и вложенный перебор перебирает подмножество одной из сторон.
Затем перебираем все множества которые могут образовывать две стороны. Вложенный перебор ищет из множества оставшихся палочек такое подмножество которое тоже может образовывать две другие параллельные стороны.
Вложенный перебор подмножеств требует примерно 3^n времени, если перебирать во втором цикле только подмножества первого.
for (int j = i; j > 0; j = (j - 1) & i)