Cod sursa(job #1347277)

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

int V[17][17]={0},n,m,mx=0;
bool R[17]={false},C[17]={false};
int megeri(int k)
{
    int a=0;
    for(int i=1;i<=m;i++)
        a+=V[i][k];
    if(a<0)
        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)
    {
        for(int j=1;j<=m;j++)
            if(megeri(j)==1)
        {
            flip_col(j);
            combcol(k,a+1);
            flip_col(j);

        }
        else
            combcol(k,a+1);

    }
    else
    {
        sum();

    }

}
void combrow(int k,int a)
{
    if(a<=k)
    {
        for(int i=1;i<=n;i++)
        {
            if(R[i]==0){
            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);
    out<<mx;
    in.close();
    out.close();

}