Valor máximo que puede ser llenado.
Estoy tratando de aprender y practicar estructuras de datos y estoy practicando programación dinámica, pero me he quedado atrapado en un problema. No sé si es un error lógico o cualquier otra cosa.
Mi declaración del problema es:
Dado un número N de cubos con L[i] pintas de líquido y un barril de capacidad C pintas, debemos encontrar la mayor cantidad de líquido que se puede poner en el barril desde ese cubo si el barril no debe desbordarse.
Este es mi código:
let V1 = [2, 3, 4, 2];
let barrel = 100;
const cache = [];
for(let i=0; i<=barrel; i++){
cache[i] = [];
for(let j=0; j<=V1.length; j++){
cache[i][j] = 0;
}
}
function findMaxDP(V1) {
let i, j;
let V = [0, ...V1];
for(i=0; i<=barrel; i++){
for(j=0; j<v.length; j++){
if(i==0){
cache[0][j] = 0;
}
if(j==0){
cache[i][0] = 0;
}
else{
if(i == v[j]){
cache[i][j] = v[j];
}
if((i-cache[i][j-1]) <= v[j]){
cache[i][j] = cache[i][j-1] + v[j];
}
if((i-cache[i][j-1]) != v[j]){
cache[i][j] = cache[i][j-1];
}
}
}
}
return cache[barrel-1][j-1]
}
console.log(findmaxdp(v1));
estoy recibiendo cero, cualquier tipo de ayuda sería apreciada.
gracias. j++){=”” if(i=”=0){” cache[0][j]=”0;” }=”” if(j=”=0){” cache[i][0]=”0;” }=”” else{=”” if(i=”=” v[j]){=”” cache[i][j]=”V[j];” }=”” if((i-cache[i][j-1])=”” <=”V[j]){” cache[i][j]=”cache[i][j-1]” +=”” v[j];=”” }=”” if((i-cache[i][j-1])=”” !=”V[j]){” cache[i][j]=”cache[i][j-1];” }=”” }=”” }=”” }=”” return=”” cache[barrel-1][j-1]=”” }=”” console.log(findmaxdp(v1));=”” “`=”” estoy=”” recibiendo=”” cero,=”” cualquier=”” tipo=”” de=”” ayuda=”” sería=”” apreciada.=””></v.length; j++){
if(i==0){
cache[0][j] = 0;
}
if(j==0){
cache[i][0] = 0;
}
else{
if(i == v[j]){
cache[i][j] = v[j];
}
if((i-cache[i][j-1]) <= v[j]){
cache[i][j] = cache[i][j-1] + v[j];
}
if((i-cache[i][j-1]) != v[j]){
cache[i][j] = cache[i][j-1];
}
}
}
}
return cache[barrel-1][j-1]
}
console.log(findmaxdp(v1));
“`
estoy recibiendo cero, cualquier tipo de ayuda sería apreciada.
gracias.>
davy.ai
Parece que podría haber algunos problemas con tu código que podrían estar causando que devuelva un resultado de cero. Aquí hay algunas cosas que debes considerar:
cache
:Estás inicializando el array
cache
para que tenga una segunda dimensión dej<=V1.length
. Sin embargo, recuerda que tienes que tener en cuenta una capacidad de barril debarrel
que podría ser mayor que el número de cubosV1.length
. Por lo tanto, es posible que desees cambiar la inicialización de la segunda dimensión decache
aj<=barrel
.i==0
:Actualmente estás estableciendo el valor inicial de la caché como
cache[0][j] = 0
cuandoi==0
. Sin embargo, deberías establecerlo comocache[i][0]=0
, ya que estás iterando a través de la segunda dimensión decache
.Tus declaraciones condicionales tienen algunos problemas. Por ejemplo, esta declaración
if((i-cache[i][j-1]) <= V[j])
debería serif((i-V[j]) >= 0 && cache[i-V[j]][j-1] + V[j] > cache[i][j-1])
, que verifica correctamente si usar el cubo actual para llenar hastai
pintas dará como resultado un mejor resultado que no usarlo.Por último, tu declaración de retorno debería ser
return cache[barrel][V1.length]
, ya que estás buscando llenar el barril hasta la capacidadbarrel
utilizando todos los cubosV1.length
.¡Espero que esto te ayude a depurar tu solución de programación dinámica!