Ejercicios resueltos
Ejercicios resueltos Ejercicios resueltos
Solución ejercicio 7. Programación dinámica Este ejercicio es una combinación de otros dos vistos en clase: cambio de moneda con un número limitado de monedas (feb 07), y el nutricionista (jun 07). La suma de los valores de los productos debe ser igual o superior (de forma mínima) a la cantidad de dinero disponible Existe un número limitado de objetos de cada tipo en la tienda Estructura para cálculos intermedios una tabla C[1..N, 0..R], donde N es el número de tipos de objetos en la tienda, y R es el valor del regalo a cambiar La relación recursiva es la siguiente (pi es el precio y ui el número de unidades del objeto i): ⎧ 0 si j ≤ 0 ⎪⎨ ⌈j/pi⌉ ∗ pi si i = 1 y j ≤ pi ∗ ui C(i, j) = +∞ si i = 1 y j > pi ∗ ui ⎪⎩ mín (pi ∗ k + C[i − 1, j − pi ∗ k]) en otro caso 0≤k≤Ki donde Ki = mín(ui, ⌈j/pi⌉). Yolanda García, Jesús Correas (DSIC - UCM) 27 / 32
Solución ejercicio 7. Programación dinámica (cont.) fun regalos(p[1..N], u[1..N],Cant) crear C[1..N,0..Cant] desde i← 1 hasta N hacer C[i,0] ← 0 desde i← 1 hasta N hacer desde j← 1 hasta Cant hacer si i=1 entonces si j/p[i] ≤ u[i] entonces C[i,j]← ⌈j/p[i]⌉*p[i] si no C[i,j]← +∞ si no min ← +∞ desde k← 0 hasta mín(⌈j/p[i]⌉, u[i]) hacer si k*p[i]>j entonces min ← mín(min,k*p[i]) si no min ← mín(min,k*p[i]+C[i-1,j-k*p[i]]) fin desde C[i,j] ← min fin si fin desde fin desde devolver C[N,Cant] fin fun Yolanda García, Jesús Correas (DSIC - UCM) 28 / 32
- Page 1 and 2: Ejercicio 1. Programación dinámic
- Page 3 and 4: Solución Ejercicio 1. Programació
- Page 5 and 6: Ejercicio 2. Programación dinámic
- Page 7 and 8: Solución ejercicio 2. Programació
- Page 9 and 10: Solución ejercicio 2. Programació
- Page 11 and 12: Solución ejercicio 3. Programació
- Page 13 and 14: Solución ejercicio 3. Programació
- Page 15 and 16: Solución ejercicio 3. Programació
- Page 17 and 18: Solución ejercicio 4. Programació
- Page 19 and 20: Solución ejercicio 4. Programació
- Page 21 and 22: Solución ejercicio 5. Programació
- Page 23 and 24: Solución ejercicio 5. Programació
- Page 25 and 26: Solución ejercicio 6. Programació
- Page 27: Ejercicio 7. Programación dinámic
- Page 31 and 32: Ejercicio 8. Programación dinámic
- Page 33: Solución ejercicio 8. Programació
Solución ejercicio 7. Programación dinámica (cont.)<br />
fun regalos(p[1..N], u[1..N],Cant)<br />
crear C[1..N,0..Cant]<br />
desde i← 1 hasta N hacer C[i,0] ← 0<br />
desde i← 1 hasta N hacer<br />
desde j← 1 hasta Cant hacer<br />
si i=1 entonces<br />
si j/p[i] ≤ u[i] entonces C[i,j]← ⌈j/p[i]⌉*p[i]<br />
si no C[i,j]← +∞<br />
si no<br />
min ← +∞<br />
desde k← 0 hasta mín(⌈j/p[i]⌉, u[i]) hacer<br />
si k*p[i]>j entonces min ← mín(min,k*p[i])<br />
si no min ← mín(min,k*p[i]+C[i-1,j-k*p[i]])<br />
fin desde<br />
C[i,j] ← min<br />
fin si<br />
fin desde<br />
fin desde<br />
devolver C[N,Cant]<br />
fin fun<br />
Yolanda García, Jesús Correas (DSIC - UCM) 28 / 32