我试图在c ++中最大化这个功能:
我把它放在函数中:
int F(int n , int T ){
if( T >= 0 && n == 0){
return 0;
}else if( T < 0){
return INT_MIN;
} else if(T >= 0 && n > 0){
for(int i = 0 ; i <= m[n-1] ; i++){
ganancia = max(i * v[n-1] + F(n-1,T-i*t[n-1]),ganancia );
}
}
}
但是当我穿上n 3,T 8,t {1,2,2},v {12,15,30}并最后在m {3,3,2}时我的程序返回2,当它有返回99。
答案 0 :(得分:1)
函数中有三个分支,但只有两个返回值。如果您未能返回值,则会有未定义的行为。您需要从所有分支返回一个值。
答案 1 :(得分:0)
现在我有这样的代码:
int F(int n , int T ){
if( T >= 0 && n == 0){
return 0;
}else if( T < 0){
return INT_MIN;
} else if(T >= 0 && n > 0){
for(int i = 0 ; i <= m[n-1]-1 ; i++){
return (max(i * v[n-1] + F(n-1,T-i*t[n-1]),(i+1) * v[n-1] + F(n-1,T- (i+1)*t[n-1]) ));
}
}
}
现在它显示我的程序12而不是13,至少我已经离开了那个2值。谢谢!