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.
R1VQiSyYuVlcJ
Ćwiczenie 2
Wymyśl pytanie na kartkówkę związane z tematem materiału.
Wymyśl pytanie na kartkówkę związane z tematem materiału.
R1OWUM78Vu3dM1
Ć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.
1
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.
liczba_typow_monet – liczba typów monet; liczba naturalna Wynik:
liczba_monet – minimalna liczba monet potrzebna do wydania zadanej kwoty; liczba naturalna
Działanie programu przetestu przetestuj dla następujących danych:
Linia 1. int monety otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 przecinek 3 przecinek 7 przecinek 9 zamknij nawias klamrowy średnik.
Linia 2. int liczba podkreślnik typow podkreślnik monet znak równości 4 średnik.
Linia 3. int reszta znak równości 59 średnik.
int monety[] = {1, 3, 7, 9};
int liczba_typow_monet = 4;
int reszta = 59;
Wynik działania programu dla podanych danych:
Linia 1. 7.
7
R13HI2GpthG8g
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.
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. int wydawanie podkreślnik reszty otwórz nawias okrągły int monety otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek int liczba podkreślnik typow podkreślnik monet przecinek int reszta zamknij nawias okrągły.
Linia 6. otwórz nawias klamrowy.
Linia 7. int maksymalna podkreślnik wartosc znak równości 1000000 średnik.
Linia 8. int asterysk d znak równości new int otwórz nawias kwadratowy reszta plus 1 zamknij nawias kwadratowy średnik.
Linia 9. d otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 średnik.
Linia 11. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny znak równości reszta średnik plus plus i zamknij nawias okrągły otwórz nawias klamrowy.
Linia 12. d otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości maksymalna podkreślnik wartosc średnik.
Linia 13. for otwórz nawias okrągły int j znak równości 0 średnik j otwórz nawias ostrokątny liczba podkreślnik typow podkreślnik monet średnik plus plus j zamknij nawias okrągły otwórz nawias klamrowy.
Linia 14. if otwórz nawias okrągły i zamknij nawias ostrokątny znak równości monety otwórz nawias kwadratowy j zamknij nawias kwadratowy ampersant ampersant d otwórz nawias kwadratowy i minus monety otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias kwadratowy plus 1 otwórz nawias ostrokątny d otwórz nawias kwadratowy i zamknij nawias kwadratowy zamknij nawias okrągły otwórz nawias klamrowy.
Linia 15. d otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości d otwórz nawias kwadratowy i minus monety otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias kwadratowy plus 1 średnik.
Linia 16. zamknij nawias klamrowy.
Linia 17. zamknij nawias klamrowy.
Linia 18. zamknij nawias klamrowy.
Linia 20. int liczba podkreślnik monet znak równości d otwórz nawias kwadratowy reszta zamknij nawias kwadratowy średnik.
Linia 21. return liczba podkreślnik monet średnik.
Linia 22. zamknij nawias klamrowy.
Linia 24. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 25. int monety otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 przecinek 3 przecinek 7 przecinek 9 zamknij nawias klamrowy średnik.
Linia 26. int liczba podkreślnik typow podkreślnik monet znak równości 4 średnik.
Linia 27. int reszta znak równości 59 średnik.
Linia 29. cout otwórz nawias ostrokątny otwórz nawias ostrokątny wydawanie podkreślnik reszty otwórz nawias okrągły monety przecinek liczba podkreślnik typow podkreślnik monet przecinek reszta zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 31. return 0 średnik.
Linia 32. zamknij nawias klamrowy.
#include <iostream>
using namespace std;
int wydawanie_reszty(int monety[], int liczba_typow_monet, int reszta)
{
int maksymalna_wartosc = 1000000;
int* d = new int[reszta + 1];
d[0] = 0;
for (int i = 1; i <= reszta; ++i) {
d[i] = maksymalna_wartosc;
for (int j = 0; j < liczba_typow_monet; ++j) {
if (i >= monety[j] && d[i - monety[j]] + 1 < d[i]) {
d[i] = d[i - monety[j]] + 1;
}
}
}
int liczba_monet = d[reszta];
return liczba_monet;
}
int main() {
int monety[] = {1, 3, 7, 9};
int liczba_typow_monet = 4;
int reszta = 59;
cout << wydawanie_reszty(monety, liczba_typow_monet, reszta) << endl;
return 0;
}
R1Ut6mjEImPPF
Ćwiczenie 4
Uzupełnij kod odpowiednim fragmentem.
Uzupełnij kod odpowiednim fragmentem.
1
21
Ćwiczenie 5
Dany jest pręt o pewnej długości dlugosc oraz tablica zawierająca ceny, jakie można uzyskać za każdą z długości pręta od 1 do dlugosc. Pręt można pociąć na dowolne kawałki pod warunkiem, że ich długości będą liczbami naturalnymi. Napisz program, który zwróci maksymalną wartość, jaką można otrzymać przez odpowiednie pocięcie pręta. W rozwiązaniu użyj programowania dynamicznego.
Specyfikacja problemu:
Dane:
dlugosc – długość danego pręta; liczba naturalna
ceny – tablica zawierająca ceny za każdą z długości pręta od 1 do dlugosc
Wynik:
maksymalna_wartosc – maksymalna wartość, jaką można otrzymać przez odpowiednie pocięcie pręta; liczba naturalna
Działanie programu przetestu przetestuj dla następujących danych:
Linia 1. int ceny otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 przecinek 5 przecinek 8 przecinek 9 przecinek 10 przecinek 17 przecinek 18 przecinek 20 zamknij nawias klamrowy średnik.
Linia 2. int dlugosc znak równości 8 średnik.
int ceny[] = {1, 5, 8, 9, 10, 17, 18, 20};
int dlugosc = 8;
Wynik działania programu dla podanych danych:
Linia 1. 22.
22
RDWbgBCyvfx6U
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.
Linia 1. kratka include otwórz nawias ostrokątny iostream zamknij nawias ostrokątny.
Linia 3. using namespace std średnik.
Linia 5. int ciecie podkreślnik preta otwórz nawias okrągły int ceny otwórz nawias kwadratowy zamknij nawias kwadratowy przecinek int dlugosc zamknij nawias okrągły otwórz nawias klamrowy.
Linia 6. if otwórz nawias okrągły dlugosc znak równości znak równości 0 zamknij nawias okrągły.
Linia 7. return 0 średnik.
Linia 9. int asterysk ceny podkreślnik posrednie znak równości new int otwórz nawias kwadratowy dlugosc plus 1 zamknij nawias kwadratowy średnik.
Linia 10. ceny podkreślnik posrednie otwórz nawias kwadratowy 0 zamknij nawias kwadratowy znak równości 0 średnik.
Linia 12. for otwórz nawias okrągły int i znak równości 1 średnik i otwórz nawias ostrokątny znak równości dlugosc średnik plus plus i zamknij nawias okrągły otwórz nawias klamrowy.
Linia 13. int max podkreślnik cena znak równości 0 średnik.
Linia 14. for otwórz nawias okrągły int j znak równości 1 średnik j otwórz nawias ostrokątny znak równości i średnik plus plus j zamknij nawias okrągły otwórz nawias klamrowy.
Linia 15. max podkreślnik cena znak równości max otwórz nawias okrągły max podkreślnik cena przecinek 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 zamknij nawias okrągły średnik.
Linia 16. zamknij nawias klamrowy.
Linia 17. ceny podkreślnik posrednie otwórz nawias kwadratowy i zamknij nawias kwadratowy znak równości max podkreślnik cena średnik.
Linia 18. zamknij nawias klamrowy.
Linia 20. int maksymalna podkreślnik wartosc znak równości ceny podkreślnik posrednie otwórz nawias kwadratowy dlugosc zamknij nawias kwadratowy średnik.
Linia 21. delete otwórz nawias kwadratowy zamknij nawias kwadratowy ceny podkreślnik posrednie średnik.
Linia 22. return maksymalna podkreślnik wartosc średnik.
Linia 23. zamknij nawias klamrowy.
Linia 25. int main otwórz nawias okrągły zamknij nawias okrągły otwórz nawias klamrowy.
Linia 26. int ceny otwórz nawias kwadratowy zamknij nawias kwadratowy znak równości otwórz nawias klamrowy 1 przecinek 5 przecinek 8 przecinek 9 przecinek 10 przecinek 17 przecinek 18 przecinek 20 zamknij nawias klamrowy średnik.
Linia 27. int dlugosc znak równości 8 średnik.
Linia 29. cout otwórz nawias ostrokątny otwórz nawias ostrokątny ciecie podkreślnik preta otwórz nawias okrągły ceny przecinek dlugosc zamknij nawias okrągły otwórz nawias ostrokątny otwórz nawias ostrokątny endl średnik.
Linia 31. return 0 średnik.
Linia 32. zamknij nawias klamrowy.
#include <iostream>
using namespace std;
int ciecie_preta(int ceny[], int dlugosc) {
if (dlugosc == 0)
return 0;
int* ceny_posrednie = new int[dlugosc + 1];
ceny_posrednie[0] = 0;
for (int i = 1; i <= dlugosc; ++i) {
int max_cena = 0;
for (int j = 1; j <= i; ++j) {
max_cena = max(max_cena, ceny[j - 1] + ceny_posrednie[i - j]);
}
ceny_posrednie[i] = max_cena;
}
int maksymalna_wartosc = ceny_posrednie[dlugosc];
delete[] ceny_posrednie;
return maksymalna_wartosc;
}
int main() {
int ceny[] = {1, 5, 8, 9, 10, 17, 18, 20};
int dlugosc = 8;
cout << ciecie_preta(ceny, dlugosc) << endl;
return 0;
}