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

 

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