Cod sursa(job #1591819)

Utilizator remus88Neatu Remus Mihai remus88 Data 6 februarie 2016 19:05:30
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <fstream>
#include <bitset>

using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");

int n,m,a[20][20],b[20][20],st[35],s,smax;

void refacere()
{
    for (int i=1; i<=n; ++i)
        for (int j=1; j<=m; ++j)
            b[i][j]=a[i][j];
}

void switchlinie(int k)
{
    for (int j=1; j<=m; ++j) b[k][j]=-b[k][j];
}

void switchcoloana(int k)
{
    for (int i=1; i<=n; ++i) b[i][k]=-b[i][k];
}

void solve(int k)
{
    //for (int i=1; i<=k; ++i) g<<
    refacere();
    s=0;
    for (int i=1; i<=k; ++i)
    {
        if (st[i]<=n) switchlinie(st[i]);
        if (st[i]>n) switchcoloana(st[i]);
    }
    for (int i=1; i<=n; ++i)
        for (int j=1; j<=m; ++j) s=s+b[i][j];
    if (s>smax) smax=s;
}

void Back(int k)
{
    if (k>1) solve(k-1);
    if (k==n+m+1) return;
    for (int i=st[k-1]+1; i<=n+m; ++i)
        {
            st[k]=i;
            Back(k+1);
        }
}

int main()
{
    f>>n>>m;
    for (int i=1; i<=n; ++i)
        for (int j=1; j<=m; ++j) f>>a[i][j];
    Back(1);
    g<<smax<<'\n';
    f.close();
    g.close();
    return 0;
}