Resolvendo o problema da mochila usando programação dinâmica

preview_player
Показать описание
Vamos usar DP para resolver o problema da mochila clássica.
Рекомендации по теме
Комментарии
Автор

public class Mochila {

/* abordagem bottom-up
*começamos pelo caso base: zero itens com zero valor
*e começamos a encher a mochila
*/
public static int calcula (int capacidade, int[] pesos, int[] valores) {
int n = pesos.length;
int [][] k = new int[n + 1][capacidade+1];
for(int i = 0; i <= n; i++) {
for(int j = 0; j <= capacidade; j++) {
if(( i == 0) || (j ==0))// condição inicial
k[i][j] = 0;
else
//ainda da para tentar inserir o item na mochila
if(pesos[i-1] <= j)
// 2 condições: ainda tem espaço ou tentamos retirar um item
k[i][j] = Math.max(valores[i-1] + k[i-1][j-pesos[i-1]], k[i-1][j]);
else
//mochila já está cheia
k[i][j] = k[i-1][j];
}


}
//imprime matriz
for(int i = 0; i <= n; i++) {
for(int j = 0; j <= capacidade; j++)
System.out.printf("%3d ", k[i][j]);
System.out.println();
}
return k[n][capacidade];
}

public static void main(String []args) {
int[] valores = {60, 100, 120};
int[] pesos = {10, 20, 30};
int capacidade = 50;
System.out.printf("Valor maximo conseguido na mochila - %d\n", calcula(capacidade, pesos, valores));
}

}

LlllI
Автор

Mas se você adicionar 5 unidades do primeiro item, terá um valor de 300 e peso de 50. Por isso não tenho certeza se está correto

FredericoRezendeCasagrande
Автор

Henrique estou precisando de ajuda para formular um problema, pode me ajudar?

brunnacaroline
Автор

oi vc pode me ajuda me add no skype porf
kuks_k2 vai tar como lucasDS

xxxDSxxx