IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Подмассив
Egor Vladimirovich
сообщение 13.10.2006 12:21
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Егор

Репутация: -  0  +


Подскажите как решать задачку. Условие. Дан массив.Найти максимальную сумму из всех подмассивов. wacko.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 13.10.2006 15:27
Сообщение #2


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Пусть дан массив a. За один линейный проход слева направо заполняем второй массив f такой, что f[i] означает наибольшую возможную сумму из всех подмассивов а, в которых правый конец - это i-й элемент.

f[0], очевидно, равно a[0]

для всех остальных значений понятно, что f[i] = a[i] + max(0, f[i - 1])

Наибольшее из всех f [i] и будет ответом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Egor Vladimirovich
сообщение 13.10.2006 20:15
Сообщение #3


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Егор

Репутация: -  0  +


2 Michael_Rybak
Не могли бы вы написать такую процедуру. Я новичек и особо не разбераюсь в програмировании! За подсказку спасибо. :D
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 13.10.2006 23:07
Сообщение #4


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Мог бы smile.gif

type TAr = array [1 .. 100] of integer;
function Solve(n: integer; var a: TAr): integer;
var f: TAr;
i: integer;
ans: integer;
begin
f[1] := a[1];
ans := f[1];
for i := 2 to n do
begin
f[i] := a[i];
if f[i - 1] > 0 then
f[i] := a[i] + f[i - 1];

if f[i] > ans then
ans := f[i];
end;

Solve := ans;
end;

{пример использования}
var x: TAr;
begin
x[1] := 2;
x[2] := 3;
x[3] := -1;
x[4] := 4;
x[5] := -5;
Writeln(Solve(5, x));
end.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Egor Vladimirovich
сообщение 14.10.2006 12:41
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 35
Пол: Мужской
Реальное имя: Егор

Репутация: -  0  +


Огромное Спасибо! Тему можно закрыть) good.gif good.gif good.gif good.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.06.2025 3:51
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"