Cod sursa(job #639963)

Utilizator Viva12Ferentz Sergiu Viva12 Data 24 noiembrie 2011 14:05:17
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <cstdio>

using namespace std;
int s=0;
int n;
int m;
int a[100][100];
void read()
{
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            {
                scanf("%d",&a[i][j]);
                s+=a[i][j];
            }
}
int sc[17];
int sl[17];
void comut(int v,int q)
{   if(q==m)
    for(int i=0;i<q;i++)
        {
            a[i][v]*=-1;
        }
    else
    for(int i=0;i<q;i++)
        {
            a[v][i]*=-1;
        }
}
int sp;
int suma()
{   int z=0;
    for(int i=0;i<n;i++)
        for(int j=0;j<m;j++)
            {
                z+=a[i][j];
            }
            return z;
}
int vizl[100];
int vizc[100];
void back1(int k)
{
    if(k==m)
    {
        return;
    }
    for(int v=k;v<m;v++)
        {   if(!vizc[v]){
            comut(v,m);
            vizc[v]=1;
            sp=suma();
            if(s<sp)
            s=sp;
            back1(k+1);
            vizc[v]=0;
            comut(v,m);
            sp=suma();
            if(s<sp)
            s=sp;
        }
        }
}
void back(int k)
{
    if(k==n)
    {
        return;
    }
    for(int v=k;v<n;v++)
        {   if(!vizl[v])
            {vizl[v]=1;
            comut(v,n);
            sp=suma();
            if(s<sp)
            s=sp;
            back1(k);
            back(k+1);
            vizl[v]=0;
            comut(v,n);
            sp=suma();
             if(s<sp)
            s=sp;
        }
        }
}

int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
   read();
    back(0);
    printf("%d",s);
    return 0;
}