Задача из ru_programming: в заданном массиве целых чисел найти (непустой) отрезок с максимальной суммой. Массив разрешается просматривать всего один раз. Дополнительную память (массивы) использовать нельзя.
Нетерпеливые могут посмотреть решение здесь.
Нетерпеливые могут посмотреть решение здесь.

no subject
Date: 2009-04-27 21:19 (UTC)если разрешать отрезки нулевой длины
Date: 2009-04-27 21:50 (UTC)k:=0; lastmax:=0; totalmax:=0;
{lastmax=максимальная сумма по отрезкам, примыкающим к концу a[1..k], totalmax=максимальная сумма по всем отрезкам}
while (k not equal to n) do begin
k:=k+1;
lastmax:=max(lastmax+a[k],0);
totalmax:=max(lastmax,totalmax);
end;
no subject
Date: 2009-04-28 06:15 (UTC)ну тогда
Date: 2009-04-28 07:31 (UTC)lastmax:=(a[1],1,1);
totalmax:=lastmax;
{last,totalmax = (value, first, last)
for maximal sums at the end and in total}
while (k not equal to n) do begin
k:=k+1;
if lastmax.1 less than 0 then begin
lastmax.1:=a[k];
lastmax.2:=k;
lastmax.3:=k;
end else begin
lastmax.1 := lastmax.1+a[k];
lastmax.3 := k;
end;
if lastmax.1 GT totalmax.1 then begin
totalmax:=lastmax;
end;
end;
no subject
Date: 2009-04-27 22:19 (UTC)no subject
Date: 2009-04-28 05:53 (UTC)no subject
Date: 2009-04-28 06:10 (UTC)no subject
Date: 2009-04-28 10:00 (UTC)no subject
Date: 2009-04-28 16:54 (UTC)no subject
Date: 2009-04-28 06:12 (UTC)Чтобы вычитать покинутое, придётся крутить цикл в цикле и иметь массив сумм для всех длин отрезков от 1 до N.
no subject
Date: 2009-04-28 09:30 (UTC)no subject
Date: 2009-04-28 05:52 (UTC)no subject
Date: 2009-04-28 06:08 (UTC)no subject
Date: 2009-04-28 14:31 (UTC)no subject
Date: 2009-04-28 16:57 (UTC)