Я знаю, что запоминание, но имея этот рекурсивный код:Как сделать этот рекурсивный код без памятки, с memoization?
int F(int n , int T){
int ganancia ;
int maximum = INT_MIN;
if(T >= 0 && n == 0){
maximum = 0;
}else if(T < 0){
maximum = INT_MIN;
} else if(T >= 0 && n > 0){
for(int i = 0 ; i <= m[n-1] ; i++){
ganancia = i*v[n-1] + F(n- 1,T- i*t[n-1]);
if(ganancia > maximum){
maximum = ganancia;
}
}
}
return maximum;
}
Я не знаю, как превратить в запоминание. Я сделал что-то вроде этого:
int F_alm(int n, int T){
int ganancia ;
int maximum = INT_MIN;
//PETA POR ESTO
if(almacen_rec[n-1][T] != -1){
return almacen_rec[n-1][T];
}else if(T >= 0 && n == 0){
maximum = 0;
}else if(T < 0){
maximum = INT_MIN;
} else if(T >= 0 && n > 0){
for(int i = 0 ; i <= m[n-1] ; i++){
ganancia = i*v[n-1] + F(n- 1,T- i*t[n-1]);
if(ganancia > maximum){
maximum = ganancia;
}
}
}
almacen_rec[n-1][T] = maximum;
return maximum;
}
Цель состоит в том, чтобы иметь переменную almacen_rec (она инициализируется ранее все как -1), как это изображение:
Я оставляю вам общую функцию упражнения :
Благодарим за помощь!
возвращение almacen_rec [n] [T]; выглядит неправильно: n-1? – willll
О да! Но все равно возвращается неправильная таблица. Моя программа возвращает таблицу заметок, ничего не меняя, все пробелы с -1. Спасибо! –
Лучше сказать, чем раньше, моя программа возвращает все пробелы с -1, кроме пространства решений, это правильно. Таким образом, моя проблема связана с подзадачами memoization, которые не решены. –