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

Wskazówka do zadania

Object Storage Arubacloud
0 głosów
214 wizyt
pytanie zadane 14 marca 2016 w C i C++ przez niezalogowany
Mam zadanie ktore polega na tym że mam tablice n elemntowa i mam podac jaka najwieksza wartosc mozna uzyskac sumujac dowolna liczbe sąsiednich liczb np

n=7

4 1 2 -3 5 7 -20

wynik =16 bo 4+1+2-3+5+7=16

Nie chce programu prosze tlyko o jakas wsakzowke gdzie szukac? (jestem poczatkujacym) czy to cos z programowania dynamicznego?

Zadanie chce rozwiazac dla n<=10000000  wiec potrzebna mi jakas metoda.

Gdzie szukac informacji - co googleować?

2 odpowiedzi

+1 głos
odpowiedź 14 marca 2016 przez Benek Szeryf (91,050 p.)

Wskazówka: skoro należy uzyskać jak największą sumę, niezależnie od ilości liczb którą będziemy sumować, to im więcej liczb nieujemnych weźmiemy, tym większy wynik dostaniemy. Tak więc każda konsekutywna liczba naturalna będzie pożądana. Problem pojawia się wtedy, gdy natkniemy się na liczbę ujemną. Zadanie można by więc uprościć z:

4 1 2 -3 5 7 -20

do:

7 -3 12 -20

I trzeba by dalej coś pokombinować, przy czym sumowanie sąsiednich liczb ujemnych już wcale tak oczywiste nie jest.

0 głosów
odpowiedź 14 marca 2016 przez Porcupine Nałogowiec (31,560 p.)
To jeden z podstawowych i całkiem fajnych problemów algorytmicznych. Charakteryzuje się tym, że istnieje na niego masa różnych rozwiązań. Od najgorszych o złożoności O(n^3) gdzie przechodzisz całą tablicę sprawdzając każdą możliwą sumę na przedziale. Przez trochę szalone rozwiązania rekurencyjne o złożoności O(n log n) - (tu algorytm jest trochę dziwny i jest można powiedzieć trochę sztuką dla sztuki, więc nie będę się rozwodzić, jeśli byś jednak bardzo chciał to daj znać w komentarzu)... aż wreszcie najbardziej efektywny algorytm (i o dziwo koncepcyjnie na prawdę baaaarrrdzooo prosty) o złożoności liniowej: O(n).

W ostatnim z powyższych wystarczy zastosować coś takiego: idę sobie po tablicy od lewej do prawej zliczając sumę liczb, które napotkałem. Jednocześnie mam zmienną, w której pamiętam największą do tej pory napotkaną sumę liczb. Przy każdym kroku, jeśli suma się powiększyła aktualizuje tego mojego maxa. Nie ma co się przejmować ujemnymi liczbami, bo liczby dodatnie następujące po nich (tak jak i w Twoim przykładzie) mogą, że tak powiem "zadość uczynić" za te ujemne. Ale uwaga! Jeśli w pewnym momencie suma stanie się ujemna to w aktualnej sumie zapominamy o wszystkich liczbach do tej pory, bo wiadomo, że nie opłaca nam się ich brać, bo tylko obniżają potencjalną sumę.

Pozdrawiam,

Podobne pytania

+1 głos
1 odpowiedź 205 wizyt
pytanie zadane 16 stycznia 2016 w Algorytmy przez ZakosiliMiNeta Nałogowiec (30,870 p.)
0 głosów
0 odpowiedzi 207 wizyt
pytanie zadane 7 września 2017 w Algorytmy przez AlgorithmLearner Nowicjusz (120 p.)
0 głosów
1 odpowiedź 111 wizyt

92,579 zapytań

141,432 odpowiedzi

319,664 komentarzy

61,964 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!

...