【发布时间】:2016-03-29 15:10:18
【问题描述】:
我知道什么是记忆,但是有这个递归代码:
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?
-
哦,是的!但仍然是返回错误的表。我的程序返回一个备忘录表而不更改任何内容,所有空格都带有 -1。谢谢!
-
比以前说得好,我的程序返回除解空间外的所有空格,这是正确的。所以我的问题是记忆的子问题,没有解决。
-
欢迎来到Stack Overflow。如果您有其他信息来澄清您的问题,请直接将信息添加到您的问题中。 cmets 不适合这个。
标签: c++ recursion memoization