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

Автор xsc, история, 7 лет назад, По-русски

Привет, всем.

Я решаю одну задачу, и как подзадача требуется организовать рекурсия (возможно, ДП).

Подзадача:

Дано натуральные числа: K, a[1], a[2], .., a[N], где 1<=K<=10^9, 1<=a[i]<=35, 1<=N<=35, sum(a[i])<=35. Требуется разделить эти a[1], a[2], .. , a[N] на несколько не пустых и не пересикающих множества, которые у каждого множества сумма их элементов (НЕ количество, а именно сумма). является делителям число K, конечно, если такое разбиение возможен.

И вот как найти эти множества?

Спасибо.

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

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

Есть ссылка на задачу?

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

Автокомментарий: текст был обновлен пользователем xsc (предыдущая версия, новая версия, сравнить).

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

Думаю, эта последовательность может помочь.

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

    Спасибо. Мне кажется, Вы предположили, что нужен количество разбиение.

    Но в этой задаче не нужен количество разбиение, а нужен быстро найти какой нибуд валидное разбиение, если оно существует, и это задача пренадлежить к Partition of a set, если не ошибаюсь.

    Я реализовал очень сложная рекурсия, но это дает TL в 20 тесте.

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

      Нет, я предложил вам подумать над тем, какое отношение это последовательность имеет к задаче. Раз вы не разобрались, дам еще hint: в состоянии важно лишь, сколько из невзятых чисел имеют каждое значение, но неважно, какие именно числа с фиксированным значением были взяты. Поэтому состояний динамики/рекурсии будет ровно столько же, сколько разбиений числа 35 на слагаемые, что в этой последовательности соответствует числу a(35). Переходы же можно делать похожим способом: перебирать x — новое число и его разбиение на слагаемые из свободных еще чисел. Совсем тривиальная оценка времени работы такой динамики — это , но на самом деле там будет сильно меньше, если правильно отсекать разбиения, не дающие переход. Но даже такая оценка ограничивает число переходов как 108.