До максимума
Лимит времени: 1000 мс | Ограничение памяти: 10000K | |
Всего Материалы: 56579 | Принято: 29921 |
Описание
Учитывая двумерный массив положительных и отрицательных целых чисел, суб-прямоугольник любого прилегающий к югу массив размера 1 * 1 или больше , расположенным в пределах всего массива. Сумма прямоугольника равна сумма всех элементов в этом прямоугольнике. В этой задаче суб-прямоугольник с наибольшей суммой называются максимальным юг прямоугольник.
В качестве примера, максимальный суб-прямоугольник массива:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 0 -2 8
находится в нижнем левом углу:
9 2
-4 1
-1 8
и имеет сумму 15.
В качестве примера, максимальный суб-прямоугольник массива:
0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 0 -2 8
находится в нижнем левом углу:
9 2
-4 1
-1 8
и имеет сумму 15.
вход
Ввода состоит из N * N массива целых чисел. Ввода начинается с одного положительного целого числа N на отдельной строке, что указывает на размер квадратного двумерного массива. За этим следует N ^ 2 целых чисел, разделенных пробелами (пробелы и символы перевода строки). Эти N ^ 2 целые числа массива, представленные в строке-мажорной порядке. То есть, все числа в первом ряду, слева направо, то все числа во втором ряду, слева направо, и т.д. N может быть столь же большим, как 100. Числа в массиве будет находиться в диапазоне [-127,127] ,
Выход
Выход сумма максимального суб-прямоугольника.
Пример ввода
4 0 -2 -7 0 9 2 -6 2 -4 -4 1 1 -1 8 0 -2
Пример вывода
15
Источник
ID-OJ:
POJ-1050
Автор:
Caution_X
Дата представления:
20,191,117
Ключевые слова:
двумерная префикс массива и
описание моделирования:
вычисление двумерный массив весов и подматрицы Крупнейшими
основные шаги по ее решению:
перечисление I (i∈ [1 , н-]) для J (j∈ [+ 1, п]) для каждого одномерного массива столбцов и строк элементов, а значение максимального рассчитывается и обновляется ответ на одномерный массив непрерывных сечений правильных
предупреждений:
двумерный массив в одномерный массив с ручкой, сократить время накладные расходы
код переменного тока:
#include <stdio.h> #define MAXSIZE 101 // определить наибольший ряд суб-сегментов и INT MaxArray ( INT н-, INT arr_ []) { Int я, sum_ = 0 , max_ = 0 ; для (I = 1 ; я <= п; я ++ ) { если (sum_> 0 ) { sum_ + = arr_ [I]; } еще { sum_ = arr_ [I]; } если (sum_> max_) { max_ = sum_; } } вернуться Max_; } // найти максимум и суб-матрицы. INT MaxMatrix ( INT н-, INT ARR _ [] [MAXSIZE]) { INT max_ arr_ = [ 1. ] [ 1. ]; INT sum_; INT I, J, K; INT temp_arr [MAXSIZE]; для (I = 1. , я <= п, я ++) // начиная с первой строки, пока п строк { для (J = . 1 , J <= п; j ++) // изменяет только начальную строку, temp_arr инициализации массива перед { temp_arr [J] = 0 ; } для (I = J, J <= п; j ++) // из-я строка в п-й строки { для (К = 1. , К <= п, К ++ ) { temp_arr [к] + = arr_ [J] , [к]; // temp_arr [к] представляет собой сумму к-го столбца и -й строки к н-й строке. } sum_ = MaxArray (н-, temp_arr); // определить наибольший ряд суб-сегментов и ПЧ (sum_> max_) { max_ = sum_; } } } вернуться Max_; } Int основных () { ИНТ п; Int I, J; ИНТ arr_ [MAXSIZE] [MAXSIZE]; INT max_; в то время как (~ зсапЕ ( " % d " , & п)) // 多组测试相当于зсапЕ ( "% d", & п) = EOF.! { для (I = 1 ; я <= п; я ++ ) { для (J = 1 , J = <N; j ++ ) { зсапЕ ( " % d " , & arr_ [I] [J]); } } max_ = MaxMatrix (п, arr_); Е ( " % d \ п " , max_); } вернуться 0 ; }