3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
|
|
1 | |
Алгоритм подсчета количества сумм из множества08.11.2014, 17:27. Показов 1076. Ответов 7
Метки нет (Все метки)
Здравствуйте, нужен алгоритм подсчета количества возможных сумм элементов из множества Q, где B-требуемая сумма, например
множество M=(1,5,2); M=30; Другими словами нужно посчитать количество всевозможных "разложений" из 1,5,2 , чтобы получилось 30, не обязательно использовать каждый и элементов множества Q, например решение 1*30 тоже допустимо или 1*14+2*1 также допустимо Пример: N=30 M=(1,5,2) Ответ 58. В данном случае все несложно и можно решить простым перебором, но если обобщить задачу, например для N<=60 и M<=500 , то уже стоит подумать и не решать простым перебором. Или все таки поместится в одну секунду? как вы считаете? Вот кстати само условие задачи, сразу стоило бы его предоставить: Вася отошел от банкомата держа в руках свежую хрустящую купюру в N тугриков. Сегодня Вася твердо решил потратить все свои N тугриков, но придя в магазин он обнаружил, что там всего M товаров цены которых попарно различны. Сколько различных наборов товаров Вася может купить себе? Ограничение по времени 5 сек. Входной файл: В первой строке числа N <= 60, M <= 500. Во второй строке M чисел k1, k2, …, km – стоимости товаров. Выходной файл: количество возможных наборов. Примеры: Вход: 30 3 1 5 2 Выход: 58
0
|
08.11.2014, 17:27 | |
Ответы с готовыми решениями:
7
Алгоритм для подсчета количества инверсий Нахождение в строках матрицы отрицательных (<0) элементов, подсчета их количества и сумм Алгоритм для подсчета количества элементов в дереве Быстрый алгоритм для подсчета количества делителей числа |
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
08.11.2014, 17:39 | 2 |
Код
for i in [0, N) for j in M count[i + j] := count[i + j] + 1
0
|
3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
|
|
08.11.2014, 17:56 [ТС] | 3 |
Somebody, не очень понятно как и почему это будет работать, а также что есть ответ.Не могли бы вы пояснить?
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
08.11.2014, 18:16 | 4 |
count[x] - количество разложений числа x.
count[x] = count[x - M[0]] + count[x - M[1]] + ... + count[x - M[...]] Рекурсия, динамическое программирование...
0
|
3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
|
|
08.11.2014, 23:49 [ТС] | 5 |
То есть выутверждаете, что F(30)=F(30-1)+F(30-2)+F(30-5)?
Добавлено через 46 минут Я понимаю, что решение динамическое, но в предложенном вами варианте можно найти пример, например из вышеприведенного: M=(1,2,5); F(6)=5; F(5)=4; F(4)=3; F(1)=1; F(6)<>F(5)+F(4)+F(1);
0
|
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
|
|
09.11.2014, 12:30 | 6 |
Вот так тогда:
F(x, m) - количество разложений x с минимальным числом в разложении m. F(x, m) = ∑ F(x − xi, xi), xi ∈ M, xi ⩾ m F(6,1) = 5 = F(5,1) [{5, 2+2+2, 2+1+1+1, 1+1+1+1+1} + 1] + F(4,2) [{2+2} + 2] + F(1,5) [-] F(5,1) = 4 = F(5,0) [5] + F(4,1) [{2+2, 2+1+1, 1+1+1+1} + 1] + F(3, 2) [-] F(4,2) = 1 = F(2,2) [{2} + 2] F(4,1) = 3 = F(3,1) [{2+1, 1+1+1} + 1] + F(2,2) [{2} + 2] ...
1
|
1824 / 732 / 99
Регистрация: 01.10.2012
Сообщений: 3,746
|
|
09.11.2014, 13:19 | 7 |
Хорошо известна "задача о монетках". т.е. найти разложение на мин число заданных эл-тов. Думается разница только в том что нужно запоминать все предыдущие (а не только кратчайший)
0
|
3 / 3 / 2
Регистрация: 18.05.2014
Сообщений: 203
|
|
10.02.2015, 17:33 [ТС] | 8 |
Somebody, Спасибо большое, с 1 раза сдал, исходя из вашего алгоритма)
0
|
10.02.2015, 17:33 | |
10.02.2015, 17:33 | |
Помогаю со студенческими работами здесь
8
Опишите алгоритм подсчета максимального количества подряд идущих элементов Алгоритм подсчета количества чисел, которые делятся нацело на сумму своих цифр Алгоритм подсчета количества способов, которыми можно разменять рубль медными монетами Массив: Составьте алгоритм для подсчета количества дней, имеющих наибольшую температуру. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |