Metodo dinamico com recursividade

1 resposta
D

o código deveria retornar o valor máximo que a mochila comporta utizando a variavel pesoMaximo,
os pesos estao no vetor itens, a matriz tridimensional chamada resultado armazena o valor de cada iteracao(metodo dinamico),
o codigo funciona corretamente, porem, ao utilizar a sequencia a seguir ele
simplesmente nao funciona corretamente, informando um valor inferior

pesoMaximo = 10;
itens = {0, 8, 11, 2}

obs: o mesmo codigo sem utilizar metodo dinamico funciona corretamente

public int dinamica(int numeroItem, int comOuSem, int pesoAtual) {

        this.iteracoes++;
        int novoPeso, pesoCom, pesoSem;

        if (numeroItem == this.itens.length) {
            return pesoAtual;
        }
        novoPeso = pesoAtual + this.itens[numeroItem] * comOuSem;
        
        if (resultado[numeroItem][comOuSem][pesoAtual] == 0) {            
            resultado[numeroItem][comOuSem][pesoAtual] = novoPeso;
            pesoCom = this.dinamica(numeroItem + 1, 1, novoPeso);
        } else {
            pesoCom = resultado[numeroItem][comOuSem][pesoAtual];
        }
        if (pesoCom == this.pesoMaximo) {
            return pesoCom;
        }
        if(resultado[numeroItem][comOuSem][pesoAtual] == 0){
            resultado[numeroItem][comOuSem][pesoAtual] = novoPeso;
            pesoSem = this.dinamica(numeroItem + 1, 0, novoPeso);
        }else{
            pesoSem = resultado[numeroItem][comOuSem][pesoAtual];
        }

       
        if (pesoCom > this.pesoMaximo) {
            return pesoSem;
        }

        if (pesoCom > pesoSem) {
            return pesoCom;
        } else {
            return pesoSem;
        }
    }

1 Resposta

vtr002

Não estou entendendo seu problema muito bem, esse pero máximo é um valor que você informa?

Se for o que eu acho que deve ser o problema, você tem que ir colocando itens numa mochila até ela estiver cheia eu faria com uma classe Mochila.

//imports

public final class Mochila{
   private final int pesoMaximo;
   private int pesoAtual;
   private final List<Integer> pesosInseridos;

   public Mochila(int pesoMaximo){
      this.pesoMaximo=pesoMaximo;
      pesosInseridos = new ArrayList<Integer>();
      pesoAtual = 0;
   }

   public boolean estaCheio(){
      return pesoAtual==pesoMaximo;
   }

   public void adicionarPeso(int peso){
      if(peso+pesoAtual<=pesoMaximo){
         pesosInseridos.add(peso);
         pesoAtual+=peso;
      }
    }

    public List<Integer> getPesosInseridos(){
       return pesosInseridos;
    }
}

Implementação

Mochila mochila = new Mochila(10);
int[] pesos = {0, 8, 11, 2} ;
for(int peso: pesos){
   if(mochila.estaCheio())
      break;
   mochila.adicionarPeso(peso);
}

//Agora  pegar os pesos que foram inseridos e interar
mochila.getPesosInseridos();
Criado 27 de março de 2013
Ultima resposta 28 de mar. de 2013
Respostas 1
Participantes 2