думаю, что алгоритм в сущности должен быть тривиальным, но как-то с ходу ничего гениального в голову не приходит. может, коллективный разум что подскажет?
дано: два множества A и B. каждое из них представляет собой набор неких блоков, которые в свою очередь имеют какой-то произвольный размер.
задача: распределить блоки из множества A в множестве B таким образом, чтобы все блоки поместились или же сказать, что такое размещение не возможно если это так. при размещении блоки не могут делиться или перекрывать друг друга. полученное взаимное расположение блоков из A в B друг относительно друга не важно.
пример1: A = {10, 10, 10}, B = {40}. укладывая блоки из A в B последовательно один за другим мы достигнем желаемого и ещё останется хвостик[и] - распределение возможно.
пример2: A = {10, 20}, B = {15, 25}. первый идёт в первый, второй во второй - распределение возможно.
пример3: A = {10, 20, 30}, B = {10, 20, 10, 20 }. распределение невозможно.
ps: реальные размеры множеств могут быть достаточно большими, i.e. тысячи/сотни тысяч объектов в каждом из них.
// wbr