Cod sursa(job #2901389)

Utilizator LucianCCraciun Lucian Stefan LucianC Data 13 mai 2022 17:36:11
Problema Jocul Flip Scor 10
Compilator py Status done
Runda Arhiva de probleme Marime 1.8 kb
#!/usr/bin/env python
# coding: utf-8

# Jocul Flip

class FlipGame:

    def __init__(self, n, m, matrix):
        self.n = n
        self.m = m
        self.board = matrix
        self.max_sum = 0

    def board_sum(self):
        total_sum = 0
        for i in range(self.n):
            for j in range(self.m):
                total_sum += self.board[i][j]

        return total_sum


    def solve_flip(self):
        self.max_sum = max(self.board_sum(), self.max_sum)

        self.solve(0, 0)

        return self.max_sum



    def solve(self, k, l):
        if k >= self.n and l >= self.m:
            self.max_sum = max(self.board_sum(), self.max_sum)
            return self.max_sum

        dims = ['row', 'col']
        sgns = [1, -1]

        for dim in dims:
            for sgn in sgns:
                if dim == 'row' and k < self.n:
                    for jj in range(self.m):
                        self.board[k][jj] = sgn * self.board[k][jj]
                    self.solve(k+1, l)
                elif dim == 'col' and l < self.m:
                    for ii in range(self.n):
                        self.board[ii][l] = sgn * self.board[ii][l]
                    self.solve(k, l+1)
                else:
                    self.max_sum = max(self.board_sum(), self.max_sum)


    def print_board(self):
        print(self.board)



if __name__ == "__main__":
    with open("flip.in") as fin:
        n, m = map(int, fin.readline().split())
        arr = []
        for i in range(n):
            line = list(map(int, fin.readline().split()))
            arr.append(line)

    flip = FlipGame(n, m, arr)
    flip_sum = flip.solve_flip()
    print(flip_sum)
    
    with open("flip.out", "w+") as fout:
        fout.write("{:.0f}".format(flip_sum))