Мне нужна помощь в решении этой проблемы динамического программирования.Максимальное количество различных чисел, которые дают заданную сумму 'k'
Дано натуральное число
k
, найти максимальное число различных натуральных чисел, сумма кk
. Например, 6 = 1 + 2 + 3, поэтому ответ будет 3, а не 5 + 1 или 4 + 2, который будет равен 2.
Первое, что я думаю о том, что мне нужно найти подзадачу. Итак, чтобы найти максимальную сумму для k
, нам нужно найти максимальную сумму для значений, меньших k
. Таким образом, нам нужно выполнить итерацию значений 1 -> k
и найти максимальную сумму для этих значений.
Что меня смущает, как сделать формулу. Мы можем определить M(j)
как максимальное количество различных значений, которые суммируются до j
, но как я могу написать формулу для этого?
Является ли моя логика тем, что у меня есть до сих пор, и может ли кто-нибудь объяснить, как работать через это шаг за шагом?
Я не что динамическое программирование необходимо. Просто найдем наибольшее целое число n такое, что n (n + 1)/2 <= k - в основном, перестройте это, решите для n и пола. n (n + 1)/2 - сумма 1 + 2 + 3 + ... + n, чтобы сделать сумму k, вы просто замените n на k-n (n-1)/2. – moreON
Для этого есть закрытое решение, которое более эффективно, чем любые другие опубликованные решения. Некоторое время я его публиковал, но люди этого не понимали, и я отказался от него, поэтому я удалил его. Вам придется довольствоваться менее эффективным решением. –
все, что вам нужно сделать, это найти наибольшее треугольное число меньше цели. Ответом является порядок этого треугольного числа. – Jasen