Cod sursa(job #1576697)

Utilizator Andrei_PopaAndreiCDG Andrei_Popa Data 22 ianuarie 2016 19:02:57
Problema Jocul Flip Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int n,m,Tabla[100][100];
int posib[100];
int sumaMax=-999999;
void citire()
{
    f>>m>>n;
    int i,j;
    for(i=1;i<=m;i++)
    for(j=1;j<=n;j++)
    f>>Tabla[i][j];
}
void reverseLinii()
{
    int i,j;
    for(i=1;i<=m;i++)
    {
        if(posib[i]==1)
        for(j=1;j<=n;j++)
        Tabla[i][j]=Tabla[i][j]*(-1);

    }

}
void reverseColoane(int j)
{
    int i;
    for(i=1;i<=m;i++)
    Tabla[i][j]=Tabla[i][j]*(-1);

}
void coloanePos()
{
    int i,j;
    for(i=1;i<=m;i++)
    {
        if(posib[i]==1)
        {for(j=1;j<=n;j++)
        Tabla[i][j]=Tabla[i][j]*(-1);}
    }
    int sumaNor=0;
    int sumaCom=0;
    int lmax=0;
    for(j=1;j<=n;j++)
    {
        sumaNor=0;
        sumaCom=0;

        for(i=1;i<=m;i++)
        sumaNor+=Tabla[i][j];

        reverseColoane(j);

        for(i=1;i<=m;i++)
        sumaCom+=Tabla[i][j];

        if(sumaNor>sumaCom)
        lmax=lmax+sumaNor;
        else
        lmax=lmax+sumaCom;

        reverseColoane(j);
    }

    if(lmax>sumaMax)
    sumaMax=lmax;


    reverseLinii();
}
void liniiPos(int i)
{
    if(i>m)
    coloanePos();
    else
    {
        int j;
        for(j=0;j<=1;j++)
        {
            posib[i]=j;
            liniiPos(i+1);
        }
        posib[i]=0;
    }

}
int main()

{
    citire();
    liniiPos(1);

    g<<sumaMax;

    f.close();
    g.close();
    return 0;
}