Cod sursa(job #1493187)

Utilizator Andrei_PopaAndreiCDG Andrei_Popa Data 28 septembrie 2015 20:36:48
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int Tabla[17][17];
int liniiPos[17];
long long max1=-1000000000;
int n,m;
void citire()
{
    f>>n>>m;
    int i,k;
    for(i=1;i<=n;i++)
    for(k=1;k<=m;k++)
    f>>Tabla[i][k];

}
void coloane()
{
    int k,j;
    for(k=1;k<=n;k++)
    if(liniiPos[k]==1)
    for(j=1;j<=m;j++)
    Tabla[k][j]*=-1;
    int suma=0;
    for(k=1;k<=m;k++)
    {
        suma=0;
        for(j=1;j<=n;j++)
        suma=suma+Tabla[j][k];

        Tabla[0][k]=suma;
    }
    int sumaTot=0;
    for(k=1;k<=m;k++)
    {
        if((Tabla[0][k]*(-1))>Tabla[0][k])
        sumaTot=sumaTot+(Tabla[0][k]*(-1));
        else
        sumaTot=sumaTot+Tabla[0][k];
    }

    if(sumaTot>max1)
    max1=sumaTot;

    for(k=1;k<=n;k++)
    if(liniiPos[k]==1)
    for(j=1;j<=m;j++)
    Tabla[k][j]*=-1;

}
void back(int i)
{
    if(i>n)
    coloane();
    else
    {
        int k;
        for(k=0;k<=1;k++)
        {
            liniiPos[i]=k;
            back(i+1);
        }
        liniiPos[i]=0;
    }
}
void flip()
{
    back(1);

}
int main()
{

   citire();

   flip();

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