Cod sursa(job #1347260)

Utilizator GosulyGosuly Robert Gosuly Data 18 februarie 2015 21:14:25
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("flip.in.txt");
ofstream out ("flip.out");

int V[17][17]={0},n,m,mx=0;
bool R[17]={false},C[17]={false};
int megerie_col(int t)
{
    int m1=0,m2=0;;
    for(int i=1;i<=m;i++)
    {
        m1+=V[t][i];
        m2+=-V[t][i];
    }
    if(m2>m1)
        return 1;
    else
        return 0;
}
int sum()
{
    int t=0;
    for (int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            t+=V[i][j];
    mx=max(mx,t);
}
void read()
{
    in>>n>>m;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            in>>V[i][j];
}
void flip_row(int t)
{

    for(int i=1;i<=m;i++)
        V[t][i]*=-1;
        R[t]=!R[t];
}
void flip_col(int t)
{
    for( int i=1;i<=n;i++)
        V[i][t]*=-1;
    C[t]=!C[t];
}
void combcol(int k,int a)
{
    if(a<=k)
    {
            if(megerie_col(a)==1)
            {
                flip_col(a);
                combcol(k,a+1);
                flip_col(a);
            }
            else
            {
                combcol(k,a+1);
            }
    }
    else
        sum();

}
void combrow(int k,int a)
{
    if(a<=k)
    {
        for(int i=1;i<=n;i++)
        {

            flip_row(i);
            combrow(k,a+1);
            flip_row(i);

        }

    }
    else
    {

            combcol(m,1);


    }

}

int main()
{
    read();

    for(int i=0;i<=n;i++)
        combrow(i,1);
    cout<<mx;
    in.close();
    out.close();

}