Cómo resolver el problema de recolectar manzanas usando programación dinámica

Definamos dp bidimensional,

int [matemáticas] dp [n + 1] [n + 1] [/ matemáticas]

Donde [math] dp [i] [j] [/ math] representa no. de manzana cuando estás en [math] i ^ {th} [/ math] farm y tu energía es [math] j [/ math] unit.

Entonces, si tomamos manzana de la granja [math] i ^ {th} [/ math],

dp [i] [j-1] = max (dp [i] [j-1] ,, dp [i-1] [j] + manzana [i]) donde [matemáticas] 1 [/ matemáticas] [matemáticas] \ leq j \ leq n. [/ math]

si tomamos leche de la granja [math] i ^ {th} [/ math],

dp [i] [min (j + mil [i] -1, n)] = max (dp [i] [min (j + mil [i] -1, n)], dp [i-1] [j ]). [matemáticas] 1 \ leq j \ leq n. [/ matemáticas]

Nota: Si la energía es mayor que n, entonces simplemente podemos tomarla n porque en n unidades de energía podemos visitar toda la granja.

cuando la energía es cero, no podemos ir más allá, simplemente agregamos esto

dp [i] [0] = max (dp [i] [0], dp [i-1] [0])

Caso base:

Reemplace todos los elementos en la tabla con -1.

Inicialmente tenemos energía p y 0 manzana, entonces dp [0] [min (p, n)] = 0. si [matemática] p \ ge n [/ matemática] entonces tómela n como se explicó anteriormente.

Nuestra respuesta es max de dp [n] [j] [matemáticas] 0 \ leq j \ leq n. [/ Matemáticas]

Aquí está mi código java,