█████████ ████ ███░░░░░███ ░░███ ███ ░░░ ██████ ███████ ██████ ██████ ░███ ███░░███ ███░░███ ███░░███ ███░░███ ░███ ░███ ░███░███ ░███ ░███████ ░███ ░███ ░░███ ███░███ ░███░███ ░███ ░███░░░ ░███ ░███ ░░█████████ ░░██████ ░░████████░░██████ ░░██████ ░░░░░░░░░ ░░░░░░ ░░░░░░░░ ░░░░░░ ░░░░░░

Envío 1134

Problema 0xa6 - Submatriz de suma máxima en una matriz no muy grande

  • Autor: d4vsanchez
  • Fecha: 2020-10-11 01:58:24 UTC (Hace más de 3 años)
Caso # Resultado Tiempo Memoria
#1
Correcto
0.023 s 3 KBi
#2
Correcto
0.02 s 3 KBi
#3
Correcto
0.021 s 3 KBi
#4
Correcto
0.022 s 3 KBi
#5
Correcto
0.021 s 3 KBi
#6
Correcto
0.023 s 3 KBi
#7
Correcto
0.025 s 3 KBi
#8
Tiempo límite excedido
0.238 s 3 KBi
#9
Tiempo límite excedido
0.213 s 3 KBi
#10
Tiempo límite excedido
1.04 s 3 KBi
#11
Tiempo límite excedido
0.233 s 3 KBi
#12
Tiempo límite excedido
0.198 s 3 KBi
#13
Tiempo límite excedido
0.308 s 3 KBi
#14
Tiempo límite excedido
0.211 s 3 KBi
#15
Tiempo límite excedido
0.518 s 3 KBi
#16
Tiempo límite excedido
0.233 s 3 KBi
#17
Tiempo límite excedido
0.2 s 3 KBi
#18
Tiempo límite excedido
0.235 s 3 KBi
Puntos totales: 39 / 100

Código

def generate_sum_matrix(matrix, rows, columns):
    sum_matrix = matrix.copy()

    for row in range(rows):
        for col in range(columns):
            if row - 1 >= 0:
                sum_matrix[row][col] = sum_matrix[row][col] + sum_matrix[row - 1][col]
            if col - 1 >= 0:
                sum_matrix[row][col] = sum_matrix[row][col] + sum_matrix[row][col - 1]
            if col - 1 >= 0 and row - 1 >= 0:
                sum_matrix[row][col] = sum_matrix[row][col] - sum_matrix[row - 1][col - 1]

    return sum_matrix


def solve(matrix, rows, columns):
    answer = float("-inf")
    for startRow in range(rows):
        for startCol in range(columns):

            for endRow in range(startRow, rows):
                for endCol in range(startCol, columns):
                    sum_ = matrix[endRow][endCol]
                    if startRow - 1 >= 0:
                        sum_ = sum_ - matrix[startRow - 1][endCol]
                    if startCol - 1 >= 0:
                        sum_ = sum_ - matrix[endRow][startCol - 1]
                    if startRow - 1 >= 0 and startCol - 1 >= 0:
                        sum_ = sum_ + matrix[startRow - 1][startCol - 1]
                    answer = max(answer, sum_)
    return answer


def main():
    matrix = []
    rows, columns = [int(x) for x in input().split()]

    for row in range(rows):
        column = [int(x) for x in input().split()]
        assert len(column) == columns
        matrix.append(column)

    sum_matrix = generate_sum_matrix(matrix, rows, columns)
    ans = solve(sum_matrix, rows, columns)
    print(ans)


if __name__ == '__main__':
    main()