• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Pomysł na stworzenie?

Object Storage Arubacloud
0 głosów
248 wizyt
pytanie zadane 30 stycznia 2016 w C i C++ przez Rezorl Nowicjusz (120 p.)

Witam.

Jestem studentem II roku informatyki i z racji tego, że kończy się semestr dostałem projekt do napisania:
Dana jest tablica wymiaru n×2 wypełniona liczbami całkowitymi nieujemnymi. Należy wybrać z niej podzbiór o możliwie największej sumie, przy czym do zbioru nie mogą trafić liczby sąsiadujące ze sobą w pionie lub w poziomie. Wynikiem działania funkcji powinna być maksymalna suma takiego podzbioru, ewentualnie z wyliczeniem składników.

Nie do końca zrozumiałem o co w tym chodzi, więc poszedłem do prowadzącego przedmiot i nie chciał mi powiedzieć jak rozwiązać ten problem dla tablic n×2, ale podpowiedział jak to zrobić na jednej w dodatku to rozrysował. O to jak wygląda to rozrysowane:

A to jest kodm który udało mi się stworzyć:
http://pastebin.com/9d6r4DRd
 

1. Czy kod, który napisałem jest napisany dobrze?
2. Czy ma ktoś może jakiś pomysł jak to zrobić dla tablicy n×2 i czy mógłby ktoś to rozrysować albo w jakiś inny sposób wyjaśnić?

Pozdrawiam,
Rezorl.

1 odpowiedź

+1 głos
odpowiedź 30 stycznia 2016 przez andrzej_bl Bywalec (2,390 p.)

To co pokazujesz to typowy problem rozwiązywany programowaniem dynamicznym.

Mamy przykładową tablicę:

1 1 4 ...
4 2 2 ...

Potrzebujemy sześć pomocniczych zmiennych a, b, c, olda, oldb, oldc

Na początek zajmijmy się pierwszą parą (1 i 4) - mamy trzy możliwości: a=0 nie weźmiemy żadnej liczby, b=1 weźmiemy jedynkę, c=4 weźmiemy czwórkę. Teraz przepisujemy a, b, c do zmiennych olda, oldb, oldc.

Teraz druga para (1 i 2) - znowu są trzy możliwości: nie weźmiemy żadnej liczby a=4 (bo do a trafia największa liczba spośród olda, oldb, oldc), druga możliwość - weźmiemy jedynkę czyli b=1+4 (bo do b trafia liczba z tablicy plus większa z liczb olda, oldc), trzecia możliwość - weźmiemy dwójkę czyli c=2+1 (bo do c trafia liczba z tablicy plus większa z liczb olda, oldb). Przepisujemy a, b, c do olda, oldb, oldc.

Dalej trzecia para (4 i 1) - analogicznie: a=5 (największa z olda, oldb, oldc), b=4+4 (większa z liczb olda i oldc), c=2+5 (większa z olda i oldb) Przepisujemy a, b, c do olda, oldb, oldc.

Tak jedziemy do końca. Największa liczba jaką uda się nam uzyskać jest szukaną sumą.

Zauważ tylko, że w podanym przykładzie zupełnie nie opłacało się brać liczby z drugiej pary.

Podobne pytania

0 głosów
1 odpowiedź 740 wizyt
+1 głos
0 odpowiedzi 170 wizyt
pytanie zadane 17 stycznia 2016 w C i C++ przez Prime_Bull Obywatel (1,820 p.)
–2 głosów
0 odpowiedzi 473 wizyt

92,624 zapytań

141,482 odpowiedzi

319,822 komentarzy

62,005 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...