Vous êtes sur la page 1sur 10

Ejercicio 6

AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

Un excntrico nutricionista va a un restaurante. En la carta


aparecen todos los platos disponibles con el nmero de caloras.
El nutricionista conoce el nmero mnimo de caloras que su
cuerpo necesita en esa comida. Su objetivo es encontrar el
men que cubra esa cantidad de caloras o las supere de forma
mnima. Adems, no quiere repetir platos. Disead un algoritmo
de programacin dinmica que determine que platos forman el
men ptimo y el nmero de caloras del men ptimo.
1

La estructuras y/o variables necesarias para representar la


informacin del problema y la de los clculos intermedios.

La relacin recursiva entre subproblemas.

La funcin o procedimiento que implemente este algoritmo.

Ejercicio 6
AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

Un excntrico nutricionista va a un restaurante. En la carta


aparecen todos los platos disponibles con el nmero de caloras.
El nutricionista conoce el nmero mnimo de caloras que su
cuerpo necesita en esa comida. Su objetivo es encontrar el
men que cubra esa cantidad de caloras o las supere de forma
mnima. Adems, no quiere repetir platos. Disead un algoritmo
de programacin dinmica que determine que platos forman el
men ptimo y el nmero de caloras del men ptimo.
1

La estructuras y/o variables necesarias para representar la


informacin del problema y la de los clculos intermedios.

La relacin recursiva entre subproblemas.

La funcin o procedimiento que implemente este algoritmo.

Ejercicio 6
AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

Un excntrico nutricionista va a un restaurante. En la carta


aparecen todos los platos disponibles con el nmero de caloras.
El nutricionista conoce el nmero mnimo de caloras que su
cuerpo necesita en esa comida. Su objetivo es encontrar el
men que cubra esa cantidad de caloras o las supere de forma
mnima. Adems, no quiere repetir platos. Disead un algoritmo
de programacin dinmica que determine que platos forman el
men ptimo y el nmero de caloras del men ptimo.
1

La estructuras y/o variables necesarias para representar la


informacin del problema y la de los clculos intermedios.

La relacin recursiva entre subproblemas.

La funcin o procedimiento que implemente este algoritmo.

Solucin Ejercicio 6
AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

Es un problema de optimizacin. El ms parecido es el de


la mochila 0-1, pues los platos de la carta se eligen
completos o no se eligen.
Las diferencias son: como se calcula el ptimo (mnimo en
lugar de mximo), y la existencia de un valor de referencia
(nmero mnimo de caloras).
Para conocer las estructuras necesarias, analizamos lo que
se nos proporciona y lo que se pide:
Se dan el nmero de caloras de cada plato: Un vector
C [1 . . . n] donde n es el nmero de platos de la carta.
2 Se pide el men elegido: un vector M[1 . . . n] de los platos
elegidos, cuyo tamao es el nmero mximo de platos que
podemos elegir.
3 Tambin se pide el nmero de caloras del men.
1

AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

La estructura de datos intermedia debe de ser, como en el


caso de la mochila, una matriz D[1 . . . n, 0 . . . Cal] con una
fila por cada plato de la carta y en las columnas el nmero
total de caloras.
D[i, j] contiene el nmero de caloras del men ptimo
considerando los i primeros platos de la carta, aquel con
menor nmero de caloras, mayor o igual que j
El valor que buscamos es D[n, Cal].
Para calcular D[i, j] pueden darse dos casos:
Si no se elige el plato i de la carta, entonces en men
elegido para D[i, j] contendr exclusivamente platos de 1 a
i 1; D[i 1, j]
2 Si se elige el plato i, entonces el nmero de caloras del
men D[i, j] ser ci + D[i 1, j ci ]
1

AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

Hay que tener en cuenta algunos casos especiales:


D[1, j] = +, j > c1 ya que no se puede conseguir un
men de ms de c1 caloras con slo el plato 1 (no se
puede repetir).
D[1, j] = c1 , 0 < j c1
D[i, j] = 0, j 0, pues el men ptimo con al menos (o
menos) de 0 caloras es no elegir ningn plato.

La expresin recurrente es D[i, j] =

0,
si j 0

+, i = 1 j > c1
c1 , i = 1 0 < j c1

min{D[i 1, j], ci + D[i 1, j ci ]}, en otro caso


Los valores de la tabla con + garantizan que no se va a
elegir un men que tenga menos caloras que el mnimo
necesario.

Solucin Ejercicio 6 (I)


AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

fun menu (c[1 . . . n], Cal, m[1 . . . n])


crear D[1 . . . n, 0 . . . Cal]
para pl = 1 hasta n hacer
D[pl, 0] = 0
fin para
para ncal = 1 hasta Cal hacer
si pl = 1 y ncal > c[1] entonces D[pl, ncal] = +
si no si pl = 1 entonces D[pl, ncal] = c[1]

Solucin Ejercicio 6 (II)


AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

si no si ncal < c[pl] entonces


D[pl, ncal] = min(D[pl 1, ncal], c[pl])
si no
D[pl, ncal] = min(D[pl 1, ncal], c[pl] + D[pl, ncal c[pl]]))
fin para
fin para
si D[n, Cal] < + entonces obtenermenu (D, c, m)
devolver D[n, Cal]
fin fun

AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

proc obtenermenu (D[1 . . . n, 0 . . . cal], c[1 . . . n], m[1 . . . n])


plato= 1
i =n
j = Cal
mientras ((i > 0) (j > 0)) hacer
si D[i, j] = D[i 1, j] entonces
i =i 1
si no
m[plato] = i
plato = plato + 1
j = j c[i]
i =i 1
fin si
fin mientras

Solucin Ejercicio 6 (IV)


AG
C. Rodrguez
ndice
Ejercicio 1
Ejercicio 2
Ejercicio 3
Ejercicio 4
Ejercicio 5
Ejercicio 6

para i = plato hasta n hacer


m[i] = 1
fin para
fin proc

Vous aimerez peut-être aussi