Cod sursa(job #3238663)

Utilizator petru-robuRobu Petru petru-robu Data 28 iulie 2024 16:48:46
Problema Jocul Flip Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <bits/stdc++.h>
#define NMAX 17
using namespace std;

ifstream fin("flip.in");
ofstream fout("flip.out");

int n, m, a[NMAX][NMAX], col[NMAX];
int smax;

void read()
{
    fin>>n>>m;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            fin>>a[i][j];
}

int sum()
{
    int s = 0;
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            s+=a[i][j];
    return s;
}

void invertC(int col)
{
    for(int i=1; i<=n; i++)
        a[i][col] *= -1;
}

void invertL(int lin)
{
    for(int i=1; i<=m; i++)
        a[lin][i] *= -1;
}

void back(int p)
{
    if(p == m+1)
    {
        for(int i=1; i<=m; i++)
        {
            cout<<col[i]<<' ';
            if(col[i] == 1)
                invertC(i);
        }
        cout<<'\n'<<sum()<<' ';
        for(int i=1; i<=n; i++)
        {
            int sl=0;
            for(int j=1; j<=m; j++)
                sl += a[i][j];

            if(sl < 0)
                invertL(i);
        }

        int s = sum();
        cout<<s<<'\n';
        
        if(s > smax)
            smax = s;

        for(int i=1; i<=m; i++)
        {
            if(col[i] == 1)
                invertC(i);
        }
        return;
    }
    for(int k=0; k<=1; k++)
    {
        if(k == 1)
            col[p] = 1;
        back(p+1);
        if(k == 1)
            col[p] = 0;
            
    }  
}

int main()
{
    read();
    back(1);

    fout<<smax;
    return 0;
}