Ciele cvičení:
"Objavenie" dynamického programovania (od rozdeľuj a panuj, cez rekurzívnu implementáciu s memoizáciou, po dynamické programovanie):
Nájdite riešenia nasledujúcich úloh využijúc techniku "dynamické programovanie", riešenia implementujte.
Daná je postupnosť N čísel: P[0], P[1], ..., P[N-1]
. Nájdite takú podpostupnosť (nemusí byť súvislá), aby všetky hodnoty vybranej podpostupnosti tvorili rastúcu postupnosť hodnôt a vybraná postupnosť bola najdlhšia možná.
V peňaženke máme celkom N platidiel (mincí resp. bankoviek) s hodnotami P[0], P[1], ..., P[N-1]
. Predpokladajme, že hodnoty platidiel sú celé čísla (pre náročnejších: ako by sme riešili úlohu, keby sme pripustili aj halierové, resp. centové mince?). Cena nákupu je C
(opäť celé číslo).
Otázka: vieme platidlami v peňaženke zaplatiť za nákup tak, aby nám nebol vrátený žiaden výdavok, t.j. vieme z platidiel v peňaženke presne vyskladať sumu C
? V prípade kladnej odpovede vypíšte, aké platidlá treba použiť.
Aplikácia: Vedeli by ste podobným prístupom riešiť úlohu o spravodlivom rozdelení lupu medzi dvoch zlodejov?
Záhrada, ktorá má tvar obdĺžnika, sa skladá z M x N
políčok. Na každom políčku je jabloň s hojnou úrodou jabĺk. Nech na políčku [x, y]
je úroda jablone U[x, y]
. Vstup do záhrady je na políčku [0, 0]
a výstup na políčku [M-1, N-1]
. Aby návštevníci záhradu okamžite nevyplienili, rozhodol sa správca zaviesť nasledovné pravidlá pre pohyb návštevníkov:
Nájdite takú cestu záhradou, pri ktorej vyzbierate maximálny možný počet jabĺk.
Nápoveda:
Z[x, y]
maximálny možný počet jabĺk, ktoré vieme vyzbierať pri ceste z políčka [0, 0]
do políčka [x, y]
.
Z[M-1, N-1]
.
[x, y]
vieme povolenými cestami prísť len z 2 možných susedných políčok
Dané sú 2 reťazce. Nájdite najdlhšiu podpostupnosť, ktorá je vybranou podpostupnosťou oboch reťazcov.
Nie každý má vlaky zadarmo. Vtedy tu mame alternatívy, ktoré poskytuje moderná zdieľaná ekonomika ako "shareovane auta". Ľudia, ktorí majú v aute miesto pre ďalšieho pasažiera a idú autom medzi dvojicou miest zadajú túto informáciu na stránku spolu s cenou. Takto vieme ušetriť napríklad na trase Košice - Bratislava. Ale ak túto trasu poskladáme z kratších trás tak možno ušetrime ešte viac. Zoberme trasu Košice - Bratislava zapísanú ako postupnosť okresných miest: KE-PO-LE-PP-LM-ZA-TN-NM-PH-TT-BA.V okresných mestách máme cenové ponuky na prepravu medzi nimi:
Za akú najnižšiu cenu sa vieme dopraviť do Bratislavy?
https://www.youtube.com/watch?v=zInm6RvxAoU
Poznámky spracované Matejom Perejdom (verifikoval Marián Opiela):