Олимпиадный тренинг

Задача . F. Групповые проекты


Задача

Темы: дп *2400

В аудитории есть n студентов, которые работают над групповыми проектами. Студенты будут разделены на группы (группа может состоять и из одного студента), после чего каждый студент в группе будет работать над своей независимой частью проекта, а затем они объединят результаты в рамках этой группы. Известно, что i-й студент выполнит свою работу ровно за ai минут.

Если студенты в группе работают с разной скоростью, то это раздражает как тех, кто делает свою работу быстро и ждёт остальных, так и тех, кто делает её медленно и задерживает всю группу. Несбалансированностью группы называется разница между максимальным ai в группе и минимальным ai в группе. Обратите внимание, что несбалансированность группы из одного студента равна 0. Сколькими способами можно разбить студентов на группы так, чтобы суммарная несбалансированность всех групп не превосходила k?

Два разбиения считаются различными, если какие-то два студента были в одной группе в одном разбиении, но оказались в разных группах в другом разбиении.

Входные данные

В первой строке записаны два целых числа n и k (1 ≤ n ≤ 200, 0 ≤ k ≤ 1000) — количество студентов и максимальная разрешённая суммарная несбалансированность соответственно.

Во второй строке записаны n целых чисел ai (1 ≤ ai ≤ 500) — i-е число равняется количеству минут, которое тратит на выполнение своей независимой части работы студент номер i.

Выходные данные

Выведите количество способов разбить студентов на группы требуемым образом. Поскольку ответ может быть достаточно большим, то выведите остаток от деления этого числа на 109 + 7.

Примечание

В первом примере возможны три разбиения:

  1. Первый и второй студенты образуют одну группу, а третий студент — другую. Итоговая несбалансированность равняется 2 + 0 = 2.
  2. Первый студент будет в группе один, а второй и третий студенты образуют другую группу. Несбалансированность равняется 0 + 1 = 1.
  3. Все три студента будут в разных группах. Несбалансированность будет равна 0.

В третьем примере суммарная несбалансированность должна быть равна 0, поэтому каждый студент должен работать индивидуально.


Примеры
Входные данныеВыходные данные
1 3 2
2 4 5
3
2 4 3
7 8 9 10
13
3 4 0
5 10 20 21
1

time 2000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Комментарий учителя