Школа программиста

Забыли пароль?
[задачи] [курсы] [олимпиады] [регистрация]
Логин:   Пароль:    
Скрыть меню
О школе
Правила
Олимпиады
Фотоальбом
Гостевая
Форум
Архив олимпиад
Архив задач
Состояние системы
Рейтинг
Курсы
Новичкам
Работа в системе
Курсы ККДП
Дистрибутивы
Статьи
Ссылки


 
Вернуться
Тема: На командной олимпиаде никто не смог решить задачу D "выпускной", я решал рекурсией и у меня был TimeLimit на 36 тесте. Эта задача вообще на какую тему?
1
  1  Григорьевых Данил Павлович, 15 ноября 2008 г. 16:48:19
      Я понимаю так: позиция возможна, если все выбранные буквы "Y", и невозможна если ХОТЯ БЫ одна (из выбранных) "N". Поэтому если в программе заменить букву "Y" на "N", то она посчитает не кол-во неправильных ситуаций. Я Вас не понимаю наверно... объясните пожалуйста
  2  Григорьевых Данил Павлович, 10 ноября 2008 г. 17:28:21
      Мой рекурсивный перебор только лишь до 35-ого доходил :) Я что-то не понял, а как T считать за 40 миллионов?
     Тот же рекурсивный алгоритм с возвратом. Перебор осуществляется только тех вариантов расстановки танцующих, которые могут танцевать. Можно перебирать либо возможные пары, либо невозможные. Вот и выбираем тех, кого меньше и перебираем их. Только, боюсь, это все-равно не поможет...
  3  Беляев Сергей Николаевич, 10 ноября 2008 г. 6:02:53
      Динамическое программирование на самом деле. Рекурсивный перебор всех вариантов умирает, т.к. вариантов пар может быть более 80 миллионов! Это легко показать: при N=10 M=10 и K=8 и факте, что все танцевать могут со всеми получаем, что число пар равно C(8,10)*C(8,10)*8!=81648000. При грамотной рекурсивной реализации можно свести к 40 миллионам, но не факт, что и это поможет, хотя попробовать интересно. Скажу подробнее о 40 млн.: этого можно достичь, если изначально определять, что выгоднее искать: пары, которые могут танцевать или пары, которые не могут (зависит от того, чего больше в таблице: символов N или символов Y). Если пар, которые не могут танцевать меньше, чем которые могут, то находим их. Пусть это будет T, тогда в качестве ответа будет значение C(K,M)*C(K,N)*(min(M,N)!)-T. Ну а динамическое решение работает быстро, только до него очень сложно додуматься. Я, например, не додумался. Попробуйте теперь вы :) Ах, да... Вам пробовать не на чем :)
  4  Масюк Олег Юрьевич, 09 ноября 2008 г. 19:00:58
      По-моему это паросочетание
1

Чтобы оставить сообщение необходимо зарегистрироваться и авторизоваться!

Красноярский краевой Дворец пионеров, (c)2006 - 2026, ИНН 246305493507, E-mail: admin@acmp.ru