Cod sursa(job #2841967)

Utilizator Dragono63Stanciu Rares Stefan Dragono63 Data 30 ianuarie 2022 19:59:43
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <bits/stdc++.h>
#define NMAX 25

using namespace std;

/*******************************/
// INPUT / OUTPUT
ifstream f("flip.in");
ofstream g("flip.out");
/*******************************/
/// GLOBAL DECLARATIONS

int N, M;
long long ans;

int grid[NMAX][NMAX];
bool flip[NMAX];
/*******************************/
/// FUNCTIONS

void ReadInput();
void Solution();
void Output();
/*******************************/
///-------------------------------------
inline void ReadInput()
{
    f >> N >> M;

    for (int i = 1 ; i <= N ; ++ i)
    {
        for (int j = 1 ; j <= M ; ++ j)
        {
            f >> grid[i][j];
        }
    }
}
///-------------------------------------
void CheckGrid()
{
    long long sum = 0;
    for (int j = 1 ; j <= M ; ++ j)
    {
        long long A = 0, B = 0;
        for (int i = 1 ; i <= N ; ++ i)
        {
            if (flip[i])
            {
                A -= grid[i][j];
                B += grid[i][j];
            }
            else
            {
                A += grid[i][j];
                B -= grid[i][j];
            }
        }
        sum += max(A, B);
    }
    ans = max(ans, sum);
}
///-------------------------------------
void Back(int k)
{
    if (k == N + 1)
    {
        CheckGrid();
        return;
    }

    flip[k] = true;
    Back(k + 1);
    flip[k] = false;
    Back(k + 1);
}
///-------------------------------------
inline void Solution()
{
    Back(1);
}
///-------------------------------------
inline void Output()
{
    g << ans;
}
///-------------------------------------
int main()
{
    ReadInput();
    Solution();
    Output();
    return 0;
}