1

私は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} を実行すると、プログラムは 99 を返す必要があるときに 2 を返します。 .

4

2 に答える 2

1

関数には 3 つの分岐がありますが、戻り値は 2 つだけです。値を返さない場合、未定義の動作が発生します。すべてのブランチから値を返す必要があります。

于 2016-03-27T11:09:51.053 に答える