У меня проблема с написанием динамического алгоритма для решения проблемы с обменом монет, вот что я получил:
arr [значение] - глобальный массив, заполненный 0, длина значения, которое я хочу решить;
a [n] - массив со значениями монет;
void dynamic(int n, int *a, int value) {
arr[0]=0;
for(int i=1;i<value;i++){;
for(int j=0;j<n;j++){
if(i==arr[j]) arr[i]=1;
else{
arr[i] = arr[i-1] + 1;
}
}
}}
Я знаю, как я хочу это сделать, но я не знаю, как это реализовать.
Пример:
Допустим, у меня есть монеты 1 4 10 15 40 и значение 37 для решения. Я заполняю обр как это:
если ценность монеты = i, я делаю arr [i] = 1; для следующих элементов, пока я ниже следующей монеты, я ставлю предыдущее значение + 1, обр [i-1] + 1.
Это должно заполнить arr [i] следующим образом: 1 = 1, 2 = 2, 3 = 3, 4 = 1, 5 = 2 и т. Д., Но я что-то упускаю и не знаю, как правильно его заполнить Я хочу.
Может ли кто-нибудь помочь сделать это так, как я хочу? Я пытался понять это, но ничего, что я нашел, не является правильным. Я даже написал весь алгоритм с использованием рекурсии, но он слишком медленный, поэтому мне нужно писать все заново.