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

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

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

> матрицы, нахождение в матрице подматрицы
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

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


Помогите решить задачу, очень надо.
Дана матрица а(m/n). Найдите в ней прямоугольную подматрицу, сумма элементов которой максимальна. Задачу решить с помощью рекурсии.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Perl. Just code it!
******

Группа: Пользователи
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

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


volvo, точно, поторопился я с выводом.

Если у автора есть тестовые примеры пусть приводит, особо не тестил, но думаю ошибок быть не должно.

const max_rows = 10; max_cols = 10;
type tarr = array[1..max_rows, 1..max_cols] of integer;

procedure init( var arr: tarr );
var i, j: integer;
begin
randomize;
for i := 1 to max_rows do
for j := 1 to max_cols do arr[i, j] := random(21) - 10
end;

procedure dump( const arr: tarr; const left_r, left_c, rows, cols: integer);
var
i, j, stop_r, stop_c: integer;
begin
stop_r := left_r + rows - 1;
if stop_r > max_rows then stop_r := max_rows;

stop_c := left_c + cols - 1;
if stop_c > max_cols then stop_c := max_cols;

for i := left_r to stop_r do begin
writeln;
for j := left_c to stop_c do write( arr[i, j]:4 );
end;
writeln
end;

function sum ( const arr: tarr; const left_r, left_c,
rows, cols: integer ): integer;
var
i, j, stop_r, stop_c, _sum: integer;
begin
_sum := 0;

stop_r := left_r + rows - 1;
if stop_r > max_rows then stop_r := max_rows;

stop_c := left_c + cols - 1;
if stop_c > max_cols then stop_c := max_cols;

for i := left_r to stop_r do
for j := left_c to stop_c do inc(_sum, arr[i, j]);
sum := _sum;
end;

procedure solve( const arr: tarr; var r_row, r_col,
rr_count, rc_count: integer);
var
last_max, rows, cols, lr, lc, curr_sum: integer;
begin
last_max := -maxint;
for rows := max_rows downto 1 do
for cols := max_cols downto 1 do
for lr := 1 to max_rows - rows + 1 do
for lc := 1 to max_cols - cols + 1 do begin
curr_sum := sum( arr, lr, lc, rows, cols );
if curr_sum > last_max then begin
last_max := curr_sum;
r_row := lr;
r_col := lc;
rr_count := rows;
rc_count := cols;
end;
end;
end;

var arr: tarr; rows, cols, r_row, r_col, rr_cnt, rc_cnt: integer;

begin
init(arr);
dump(arr, 1, 1, max_rows, max_cols);
solve(arr, r_row, r_col, rr_cnt, rc_cnt);
dump(arr, r_row, r_col, rr_cnt, rc_cnt);
end.


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


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

 





- Текстовая версия 2.09.2025 10:41
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name