Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
R1e9rnExuu2LG1
Ćwiczenie 2
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
RNNkYlV8cyNeJ1
Ćwiczenie 3
Aby można było zastosować programowanie dynamiczne przy rozwiązaniu problemu optymalizacyjnego, problem powinien spełniać nastepujące warunki. Możliwe odpowiedzi: 1. Problem składa się z nakładających się podproblemów., 2. Ma własność optymalnej podstruktury., 3. Krok zachłanny prowadzi do optymalnego rozwiązania.
21
Ćwiczenie 4
Napisz program, który znajdzie minimalną liczbę monet potrzebnych do wydania zadanej kwoty, zakładając, że mamy do dyspozycji nieograniczoną liczbę monet o danych nominałach. Przyjmujemy, że rozwiązanie istnieje. W rozwiązaniu użyj programowania dynamicznego.
Specyfikacja problemu:
Dane:
monety – lista zawierająca dostępne nominały monet; lista liczb naturalnych
reszta – wartość, którą należy wymienić na dostępne nominały; liczba naturalna
Wynik:
liczba_monet – minimalna liczba monet potrzebna do wydania reszty; liczba naturalna
Działanie programu przetestu przetestuj dla następujących danych:
Linia 1. monety znak równości otwórz nawias kwadratowy 1 przecinek 3 przecinek 7 przecinek 9 zamknij nawias kwadratowy.
Linia 2. reszta znak równości 59.
monety = [1, 3, 7, 9]
reszta = 59
Wynik działania programu dla podanych danych:
Linia 1. 7.
7
Rf9fyTxl24z7K
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
RheBjwwHBqRs1
Uzupełnij kod odpowiednim fragmentem.
Uzupełnij kod odpowiednim fragmentem.
Linia 1. def wydanie podkreślnik reszty otwórz nawias okrągły monety przecinek reszta zamknij nawias okrągły dwukropek.
Linia 2. liczba podkreślnik monet znak równości 0.
Linia 3. m znak równości otwórz nawias kwadratowy 0 for podkreślnik in range otwórz nawias okrągły reszta plus 1 zamknij nawias okrągły zamknij nawias kwadratowy.
Linia 4. nieskonczonosc znak równości 1000000.
Linia 6. for v in range otwórz nawias okrągły 1 przecinek reszta plus 1 zamknij nawias okrągły dwukropek.
Linia 7. m otwórz nawias kwadratowy v zamknij nawias kwadratowy znak równości nieskonczonosc.
Linia 8. k znak równości nieskonczonosc.
Linia 10. for moneta in monety dwukropek.
Linia 11. if v minus moneta zamknij nawias ostrokątny znak równości 0 dwukropek.
Linia 12. k znak równości m otwórz nawias kwadratowy v minus moneta zamknij nawias kwadratowy.
Linia 14. if v otwórz nawias ostrokątny nieskonczonosc and k plus 1 otwórz nawias ostrokątny m otwórz nawias kwadratowy v zamknij nawias kwadratowy dwukropek.
Linia 15. m otwórz nawias kwadratowy v zamknij nawias kwadratowy znak równości k plus 1.
Linia 17. liczba podkreślnik monet znak równości m otwórz nawias kwadratowy minus 1 zamknij nawias kwadratowy.
Linia 18. return liczba podkreślnik monet.
Linia 21. if podkreślnik podkreślnik name podkreślnik podkreślnik znak równości znak równości apostrof podkreślnik podkreślnik main podkreślnik podkreślnik apostrof dwukropek.
Linia 22. monety znak równości otwórz nawias kwadratowy 1 przecinek 3 przecinek 7 przecinek 9 zamknij nawias kwadratowy.
Linia 23. reszta znak równości 59.
Linia 25. print otwórz nawias okrągły wydanie podkreślnik reszty otwórz nawias okrągły monety przecinek reszta zamknij nawias okrągły zamknij nawias okrągły.
def wydanie_reszty(monety, reszta):
liczba_monet = 0
m = [0 for _ in range(reszta + 1)]
nieskonczonosc = 1000000
for v in range(1, reszta + 1):
m[v] = nieskonczonosc
k = nieskonczonosc
for moneta in monety:
if v - moneta >= 0:
k = m[v - moneta]
if v < nieskonczonosc and k + 1 < m[v]:
m[v] = k + 1
liczba_monet = m[-1]
return liczba_monet
if __name__ == '__main__':
monety = [1, 3, 7, 9]
reszta = 59
print(wydanie_reszty(monety, reszta))
31
Ćwiczenie 5
Dany jest pręt długości dlugosc oraz lista cen za pręty długości od 1 do dlugosc. Pręt można pociąć na kawałki, ale tylko w ten sposób, aby długość każdego fragmentu była liczbą całkowitą. Napisz program, który zwróci maksymalną cenę, jaką można uzyskać za pręt o zadanej długości po jego pocięciu, przy danej liście z cenami (nieprzecięty pręt również jest możliwym rozwiązaniem).
Specyfikacja problemu:
Dane:
dlugosc – długość danego w zadaniu pręta; liczba naturalna
ceny – lista cen za odpowiednie długości pręta; lista liczb naturalnych o długości długosc
Wynik:
maksymalna_wartosc – maksymalna cena za odpowiednio pocięty pręt; liczba naturalna
Działanie programu przetestu przetestuj dla następujących danych:
Linia 1. ceny znak równości otwórz nawias kwadratowy 1 przecinek 5 przecinek 8 przecinek 9 przecinek 10 przecinek 17 przecinek 18 przecinek 20 zamknij nawias kwadratowy.
Linia 2. dlugosc znak równości 8.
ceny = [1, 5, 8, 9, 10, 17, 18, 20]
dlugosc = 8
Wynik działania programu dla podanych danych:
Linia 1. 22.
22
RMj2RiotSciIs
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
Wybierz jedno nowe słowo poznane podczas dzisiejszej lekcji i ułóż z nim zdanie.
RmnR1zeeN1fJ7
Uzupełnij kod odpowiednim fragmentem, a następnie zapoznaj się z całością kodu rozpisaną w rozwiązaniu..
Uzupełnij kod odpowiednim fragmentem, a następnie zapoznaj się z całością kodu rozpisaną w rozwiązaniu..
Linia 1. def ciecie podkreślnik preta otwórz nawias okrągły ceny przecinek dlugosc zamknij nawias okrągły dwukropek.
Linia 2. maksymalna podkreślnik dlugosc znak równości 0.
Linia 3. if dlugosc znak równości znak równości 0 dwukropek.
Linia 4. return 0.
Linia 6. ceny podkreślnik posrednie znak równości otwórz nawias kwadratowy 0 for podkreślnik in range otwórz nawias okrągły dlugosc plus 1 zamknij nawias okrągły zamknij nawias kwadratowy.
Linia 8. for i in range otwórz nawias okrągły 1 przecinek dlugosc plus 1 zamknij nawias okrągły dwukropek.
Linia 9. for j in range otwórz nawias okrągły 1 przecinek i plus 1 zamknij nawias okrągły dwukropek.
Linia 10. if ceny podkreślnik posrednie otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias ostrokątny ceny otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy plus ceny podkreślnik posrednie otwórz nawias kwadratowy i minus j zamknij nawias kwadratowy dwukropek.
Linia 11. ceny podkreślnik posrednie otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości ceny otwórz nawias kwadratowy j minus 1 zamknij nawias kwadratowy plus ceny podkreślnik posrednie otwórz nawias kwadratowy i minus j zamknij nawias kwadratowy.
Linia 13. maksymalna podkreślnik dlugosc znak równości ceny podkreślnik posrednie otwórz nawias kwadratowy minus 1 zamknij nawias kwadratowy.
Linia 14. return maksymalna podkreślnik dlugosc.
Linia 17. ceny znak równości otwórz nawias kwadratowy 1 przecinek 5 przecinek 8 przecinek 9 przecinek 10 przecinek 17 przecinek 18 przecinek 20 zamknij nawias kwadratowy.
Linia 18. dlugosc znak równości 8.
Linia 19. print otwórz nawias okrągły ciecie podkreślnik preta otwórz nawias okrągły ceny przecinek dlugosc zamknij nawias okrągły zamknij nawias okrągły.
def ciecie_preta(ceny, dlugosc):
maksymalna_dlugosc = 0
if dlugosc == 0:
return 0
ceny_posrednie = [0 for _ in range(dlugosc + 1)]
for i in range(1, dlugosc + 1):
for j in range(1, i + 1):
if ceny_posrednie[i] < ceny[j - 1] + ceny_posrednie[i - j]:
ceny_posrednie[i] = ceny[j - 1] + ceny_posrednie[i - j]
maksymalna_dlugosc = ceny_posrednie[-1]
return maksymalna_dlugosc
ceny = [1, 5, 8, 9, 10, 17, 18, 20]
dlugosc = 8
print(ciecie_preta(ceny, dlugosc))