Это отличается от проблемы с разменом монет а>.
Учитывая x=[a:1,b:2,c:1,d:3,e:2]
, мне нужно рассчитать все возможные комбинации ключей, чтобы сумма значений, связанных с этими ключами, просто превышала или равнялась заданному значению, скажем, 5. Простое превышение 5 означает, что если выбранные элементы меньше 5 , мы можем добавить еще один элемент, даже если он превышает 5, но как только мы превысим или равны 5, больше нельзя будет добавить элементы.
Есть две проблемы, которые усложняют мой подход:
- Обратите внимание, что некоторые значения повторяются, например. 1 и 2 встречаются дважды, и их нужно рассматривать отдельно.
- Порядок в данном случае имеет значение.
Порядок тоже имеет значение, поэтому все [b,c,d], [b,d,c], [c,b,d], [c,d,b], [d,b,c], [d,c,b]
включены отдельно. В идеале порядок имеет значение только тогда, когда мы превышаем 5, и пока сумма ровно 5, порядок не имеет значения.
Таким образом, некоторые из решений вышеуказанного вопроса: [a,b,c,d]
с суммой 7, [a,b,c,e]
с суммой 6, [b,c,d]
с суммой 6, [d,e]
с суммой 5 и т. д.
Как я подхожу к проблеме. Я подумывал использовать результат обмена монет, а затем добавить по одному элементу в каждый из полученных списков, но это не будет охватывать все случаи.
РЕДАКТИРОВАТЬ 1. Лучший способ сформулировать вопрос может состоять в том, чтобы найти все комбинации, такие, что сумма (i) равна 5 или (ii) чуть превышает 5 в качестве суммы до тех пор, пока предпоследний элемент не будет меньше 5 и, следовательно, добавление последнего элемента сделало его больше 5. Как только мы получим 5 или ›5, никакие дополнительные элементы добавляться не будут.
РЕДАКТИРОВАНИЕ 2: разъяснение проблемы с заказом. Чтобы дать немного контекста, ключи — это устройства, а значения — это необходимые ресурсы. И общее количество доступных ресурсов равно 5. И устройствам выделяются ресурсы в соответствии с их ключами, то есть первая пара ключ-значение будет обслуживаться первой (отсортирована по ключу в алфавитном порядке). Для b
требуется 2, но, скажем, доступен только 1 ресурс — ему будет назначен 1, а оставшийся 1 будет назначен при следующем запуске (переход). Поэтому, когда сумма равна ровно 5, порядок не имеет значения, поскольку каждый получает то, что хотел, и нет никакого распространения на следующий слот. Например. ed
и de
означают, что оба получают то, что хотели, поэтому они оба должны быть включены. Но для списков, которые превышают 5 только из-за добавления последнего элемента, порядок имеет значение, поскольку переполнение произойдет только для последнего элемента. Например. dce
означает, что d и c получают 3 и 1 соответственно, а e получает только 1 (при этом 1 выливается в следующий запуск). Точно так же ced
означает, что c и d получают 1 и 3 соответственно, при этом для d происходит перелив, поскольку ему присваивается только 1.
"bed"
и"ebd"
? В обоих случаях мы превышаем 5 на последнем символе. Если все порядки имеют значение, то это разумно, хотя и большой результат, но это странно. - person Scott Sauyet   schedule 20.02.2021