Poniższe zadania rozwiązuje się (mniej lub bardziej) zachłannie.
Dla każdego z nich, oprócz programu, należy uzasadnić poprawność rozwiązania zachłannego.
nawiasy
, która obliczy minimalną liczbę nawiasów które należy obrócić, tak aby uzyskać poprawne wyrażenie nawiasowe.type nawias = Otwierający | Zamykający val nawiasy : nawias list → int
wakacje : int → int → int list → int
, która na podstawie liczb k i r, oraz Ciąg jednoelementowy i pusty są również naprzemienne.
Napisz procedurę $\mathtt{naprzemienny} : \mathtt{int~array} \to \mathtt{int}$, która mając dany ciąg liczb całkowitych
w postaci tablicy obliczy długość najdłuższego jego naprzemiennego podciągu.
Na przykład, \texttt{naprzemienny [|4;8;6;5;3;4;5;3;7;9;5;7|] = 8}.
Napisz procedurę \(\mathtt{ciag} : \mathtt{int} \to \mathtt{int~list}\),
która dla danej dodatniej liczby całkowitej $n$ wyznaczy najkrótszy taki
ciąg \((x_1, x_2, \dots, x_k)\), że \(x_k = n\).
harmonogram
która obliczy optymalną kolejność wykonywania zaległych zobowiązań.podzial : int → int list
, która dla danej nieujemnej liczby całkowitejpodzial 42 = [1; 2; 5; 13; 21]
.
ile [(1, 4); (7, 9); (-2, 3); (4, 9); (9, 12); (0, 5); (3, 7)] (-1, 11) = 4
Jasio bawi się jednym z samochodzików leżących na podłodze.
Oprócz Jasia w pokoju cały czas przebywa mama.
Gdy Jasio chce się bawić jakimś innym samochodzikiem i jeśli ten samochodzik jest na podłodze, to sięga po niego.
Jeśli jednak samochodzik znajduje się na półce, to musi mu go podać mama.
Mama podając Jasiowi jeden samochodzik, może przy okazji zabrać z podłogi dowolnie wybrany przez siebie
inny samochodzik i odłożyć go na półkę (tak, aby na podłodze nie brakło miejsca).
Mama bardzo dobrze zna swoje dziecko i wie dokładnie, którymi samochodzikami Jasio będzie chciał się bawić.
Dysponując tą wiedzą mama chce zminimalizować liczbę przypadków, gdy musi podawać Jasiowi samochodzik z półki.
W tym celu musi bardzo rozważnie odkładać samochodziki na półkę.
Napisz procedurę samochodziki
, która dla danej liczby k oraz listy samochodzików, którymi zechce się
bawić Jasio, obliczy minimalną liczbę razy, kiedy mama będzie musiała Jasiowi podać samochodzik.
ruchy : int array → (int * int * int) list
, która dla danej tablicy a wyznaczy