Cod sursa(job #1110294)

Utilizator JusTMarKTMDMargineanu Cristian JusTMarKTMD Data 17 februarie 2014 22:20:52
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include<fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int t[17][17], N,M, smax;
int checksum()
{
    int i,j,suma=0;
    for (i=1;i<=N;i++)
        for (j=1;j<=M;j++)
            suma+=t[i][j];
    return suma;
}
int checkline(int a)
{
    int i, suma=0;
    for (i=1; i<=M; i++)
        suma+=t[a][i];
    return suma;
}
int checkcolumn(int a)
{
    int i, suma=0;
    for (i=1; i<=N; i++)
        suma+=t[i][a];
    return suma;
}
int checkline_r(int a)
{
    int i, suma=0;
    for (i=1; i<=M; i++)
        suma-=t[a][i];
    return suma;
}
int checkcolumn_r(int a)
{
    int i, suma=0;
    for (i=1; i<=N; i++)
        suma-=t[i][a];
    return suma;
}
void bt(int a, int b)
{
    int i,j,i2,j2;
    for(i=a+1; i<=N; i++)
        for (j=b+1; j<=M; j++)
           {
            if (checkline(i)<checkline_r(i))
                {
                    for(i2=1;i2<=M;i2++)
                        t[i][i2]=-t[i][i2];
                    bt(i, j);}
            if (checkcolumn(j)<checkcolumn_r(j))
            {
                for(j2=1;j2<=N;j2++)
                    t[j2][j]=-t[j2][j];
                bt(i,j);
            }
            if (checksum()>smax) smax=checksum();
           }
}
int main ()
{
    int i, j;
    f>>N>>M;
    for (i=1;i<=N;i++)
        for (j=1;j<=M;j++)
            f>>t[i][j];
    bt(0,0);
    g<<smax;
}