Przejdź do treści

Programowanie zachłanne i dynamiczne (Część 1)

Materiały

Dla nauczyciela

Materiał dla nauczyciela

Dla ucznia

Programowanie dynamiczne (MAIN2) Programowanie zachłanne (MAIN2)

Zadania

Zadanie 1. Pszczółki

Pszczoły rozmnażają się w specyficzny sposób: z niezapłodnionych jaj rodzą się samce (trutnie), a z zapłodnionych – samice (pszczoły). Rodzina pszczoły jest więc nietypowa – ma ona co prawda i ojca, i matkę, ale już tylko jednego dziadka i dwie babki. Janek dogłębnie bada ten temat i zastanawia się, ile męskich przodków żyło w rodzinie pszczoły w \(n\)-tym pokoleniu. Pomóż Jankowi dokonać obliczeń!

Wejście

Pierwszy wiersz zawiera jedną liczbę całkowitą \(n\) (\(0 < n ≤ 10^5\)) – numer pokolenia pszczoły, dla którego szukamy liczby trutni.

Wyjście

Jedna liczba całkowita – liczba trutni w \(n\)-tym pokoleniu. Ponieważ liczba trutni bardzo szybko rośnie, wystarczy, że wypiszesz wynik mod \(10^9 + 7\).

Przykład

Wejście Wyjście
5 5
Wskazówka

Liczba trutni w n-tym pokoleniu to n-ty wyraz ciągu Fibonacciego.

Sprawdź kod na Szkopule

Zadanie 2. iGruszka

Firma iGruszka wyprodukowała nowy model smartfona. Telefon ma dotykowy ekran, całkiem niezłe parametry i śliczne logo w kształcie nadgryzionej gruszki. Zarząd firmy postanowił jak najwięcej zarobić na swoim sztandarowym produkcie. Przeprowadzono więc bardzo szczegółowe badania sprawdzające, jaką kwotę są gotowi zapłacić poszczególni klienci za aparat. Sprawdzono też, jaką liczbę telefonów mogą wyprodukować firmowe fabryki. Znając koszty produkcji urządzenia, wyniki badań klientów oraz liczbę możliwych do zamówienia smartfonów, oblicz najlepszą cenę urządzenia (tzn. taką, by firma iGruszka zarobiła jak najwięcej) oraz zysk firmy.

Wejście

Pierwszy wiersz wejścia zawiera trzy liczby całkowite \(s\), \(k\) oraz \(n\) – odpowiednio liczba możliwych do wyprodukowania telefonów, koszt jednego telefonu oraz liczba potencjalnych klientów (\(0 \leq s, k, n \leq 10^6\)). W kolejnych \(n\) liniach znajdują się maksymalne kwoty \(x_i\), które \(i\)-ty klient jest gotowy zapłacić za telefon (\(0 \leq x_i \leq 10^6\)).

Wyjście

Na wyjściu w jednym wierszu wypisz jedną liczbę całkowitą – maksymalny możliwy do uzyskania zysk firmy.

Przykład

Wejście Wyjście
5 8 5
15
11
10
12
16
14
Wskazówka

Zadanie to możemy rozwiązać metodą zachłanną – będziemy próbowali sprzedać jak największą liczbę telefonów za jak największą możliwą kwotę.

Sprawdź kod na Szkopule

Zadanie 3. Spadek

Stary Jan ma dwóch synów. Ponieważ chłopcy często się kłócą, postanowił zapobiec następnym niesnaskom i sam podzieli majątek między nich. Jan chce rozdzielić majątek na dwie części tak, aby różnica wartości pomiędzy nimi była jak najmniejsza. Jeśli nie da się podzielić po równo, starszy syn otrzyma więcej.

Wejście

W pierwszym wierszu standardowego wejścia zapisano liczbę naturalną \(p\) (\(1 \leq p \leq 150\)) – liczbę składników majątku, a następnie ich wartości \(w_i\) (\(1 \leq w_i \leq 10 000\), \(i = 1, 2, 3 \dots p\)).

Wyjście

W jednym wierszu standardowego wyjścia zapisz kwoty wartości części majątku starszego i młodszego syna, rozdzielając je spacją.

Przykład

Wejście Wyjście
4
2 2 2 5
6 5
5
10 5 10 5 5
20 15
Wskazówka

W tym zadaniu metoda zachłanna nie zadziała!

Sprawdź kod na Szkopule