Задано целое число n
и s
различных размеров, но с положительными по возрастанию номерами от 0
до s_i
в качестве элементов. Пусть хорошая сумма определяется здесь как a_1 + a_2 + ... + a_s = n
. Подсчитайте, сколько сумм существует, когда вы берете за каждый a_i
элемент из соответствующего набора s_i
.Изменение размера подмножества
Я пытался генерировать любые возможные пути и опускать те, которые являются omittable, то есть когда у вас есть, например s=3
, n=1
и вы получаете наборы s_0={0,1}
, s_1={0,1,2,3}
, s_2={0,1,2}
, то вы можете опустить чек на сумму 0 + 0 + a_3
так a_3
не сможет быть достаточно большим. Я применил решение динамического программирования для нормальной суммы подмножества для каждой из этих возможных последовательностей, однако я получаю гораздо большие результаты, чем должен, и очень медленный.
Есть ли хорошие алгоритмы, которые я могу применить здесь?
@ user5379430 это массив 's' словарей. Каждая запись '(k, v)' в словаре означает, что вы можете создать некоторые 'k' в' v' способами. – IVlad
@ user5379430 в 'dp [s - 1] [n]'. – IVlad
@ user5379430 Я разместил код Python, который дает 2 для вашего примера. Если вы разместите свой код, мы сможем помочь вам его отладить. – IVlad