Array
A ={1,2,3}
Для значения Sum = 5
Возможная комбинацияНахождение все комбинации ряда для определенной суммы
{3,2} , {1,1,1,1,1} , {2,2,1} and all possiable one
вот мой подход:
int count(int S[], int m, int n)
{
// m is the size of the array and n is required sum
// If n is 0 then there is 1 solution (do not include any coin)
if (n == 0)
return 1;
// If n is less than 0 then no solution exists
if (n < 0)
return 0;
// If there are no coins and n is greater than 0, then no solution exist
if (m <=0 && n >= 1)
return 0;
// count is sum of solutions (i) including S[m-1] (ii) excluding S[m-1]
return count(S, m - 1, n) + count(S, m, n-S[m-1]);
}
Мой подход Неудобство :: Он должен повторно пересчитывать множество комбинаций снова и снова. Таким образом, значение суммы очень велико, поэтому оно очень медленное.
Я хочу осуществить это с помощью динамического программирования пожалуйста, предоставьте мне объяснения, как я могу хранить вычисленное значение, поэтому я могу использовать его и сократить время моей программы
Чтобы не повторять одни и те же комбинации снова и снова, вы можете добавить мемуары в свой код: http: //en.wikipedia.org/wiki/Memoization –
@DmitryBychenko я немного путаюсь здесь, как я могу использовать это в своем коде –
Найдя решение, добавьте его в «Словарь» и только потом верните; перед каждым вызовом повторной проверки проверьте, содержит ли «Словарь» требуемое значение –