Приведенные n кубиков, каждый из которых имеет m лиц, пронумерованных от 1 до m, найти количество способов получить сумму X. X - это суммирование значений на каждой грани при броске всех кубиков. 4 + 3 и 3 + 4 следует рассматривать одинаково. Не считайте разные перестановки. Пример для п = 2, т = 6 и X не = 7 Нет путей должно быть 3 (1,6 и 2,5 и 3,4)DynamicProgramming количество костей количество способов
-1
A
ответ
1
я пишу короткий код Python для Вас:
d = {}
def f(n, m, x):
if n == 0 and x == 0:
return 1
if n < 0 or m == 0 or x < 0:
return 0
if d.get((n, m, x)) is not None:
return d[(n, m, x)]
ret = f(n - 1, m, x - m) + f(n, m - 1, x)
d[(n, m, x)] = ret
return ret
print f(2, 6, 7) #return 3, as your example
print f(3, 6, 7) #return 4, (2 2 3), (1 3 3), (1 2 4), (1 1 5)
простое объяснение:
f(n, m, x) = the ways of now we have n dices, and now the dice numbered from 1 to m to achieve sum x.
И
f(n, m, x) = f(n - 1, m, x - m) + f(n, m - 1, x)
Тогда
f(n - 1, m, x - m): throw a dice and it must be number m.
f(n, m - 1, x): don't throw a dice, and we let the dice number decrease 1(so we can't throw a dice with number m now, it could be m-1 as most)
Почему мы должны бросать кости с номером m? О, таким образом, мы могли бы получить решение, отличное от других (я имею в виду избегать подсчета 3+4
и 4+3
в качестве разных решений).
Подведите итог выше с помощью запоминания (если вы не имеете представления о запоминании, вы можете узнать некоторые основные вещи о динамическом программировании), мы придем к решению.
Смежные вопросы
- 1. Количество способов разделить массив
- 2. Количество способов разделить число
- 3. Количество способов окрашивания сетки
- 4. Подсчитайте количество способов внесения изменений
- 5. Количество способов приема конфет `N`
- 6. Количество способов правильно организовать скобку
- 7. Количество способов организации набора чисел
- 8. Что такое количество способов процессора:
- 9. Найдите количество способов переупорядочения последовательности
- 10. Количество способов сделать треугольник невозможно?
- 11. Количество способов сделать изменения для количества N
- 12. Динамическое программирование - количество способов создания здания
- 13. Как узнать ассоциативность (количество способов) TLB?
- 14. Подсчитайте количество способов комбинирования кирпичей LEGO
- 15. Количество способов подсчета ничего не такое?
- 16. способов упростить большое количество nextInt/nextDouble?
- 17. Максимальное количество способов перехода к последнему элементу
- 18. Как отобразить свернутое количество костей всем онлайн-пользователям за раз?
- 19. OpenGL ES 2.0 Максимальное количество костей для удаления вершин?
- 20. find Количество способов получить общее количество 17 центов (например), используя 1,5,10,25,50 центов
- 21. Количество способов выбрать город/города из списка N городов
- 22. количество способов выбора x элементов из k разных сваи
- 23. Количество способов добавить сумму S с номерами N
- 24. Учитывая кодированное сообщение, подсчитайте количество способов его декодирования.
- 25. Количество способов чтения xml-файла с другого сервера в PHP?
- 26. Каково общее количество способов расположения кирпичей на стене?
- 27. Как найти количество способов перестановки строки, удовлетворяющей приведенным ниже условиям?
- 28. Подсчитайте количество способов разделить число на 4 части.
- 29. сколько способов уменьшить количество TIME_WAIT как можно скорее в клиенте
- 30. Как определить количество способов разбиения числа на суммы меньших чисел
Не сложно. Но я думаю, вы должны привести несколько примеров о вашей проблеме ... – Sayakiss
@Sayakiss Спасибо, добавлен пример –
Так в чем ваш вопрос? –