Cod sursa(job #757686)

Utilizator bratualexBratu Alexandru bratualex Data 12 iunie 2012 23:14:12
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.24 kb
#include <fstream>

using namespace std;

ifstream fin ( "flip.in");
ofstream fout ( "flip.out");

void back (int,int,int);
void testare ( int,int);
void afisare ( int );
//void afisare ( int );
//void afisare1 ( int );
int maxim,s[50],sl[50],sc[50],a[16][16],cm=0;
int main()
{
    int n,m,i,j;
    fin>>n>>m;
    for (i=0;i<n;i++)
        for (j=0;j<m;j++)
        {
            fin>>a[i][j];
            sl[i]=sl[i]+a[i][j];
        }
    for ( i=0;i<m;i++ )
        for (j=0;j<n;j++ )
        {
            sc[i]=sc[i]+a[j][i];
        }

    back(0,n,m);
    //afisare ( cm );

    fout<</*"maximu maxim"<<*/maxim;
    fin.close();
    fout.close();
    return 0;
}

void back (int k, int n, int y)
{
    int i=0;
    for ( i=-1;i<=1;i++)
    {
        if (i!=0)
        {


            s[k]=i;
            if ( k==n-1 )
            {
                //afisare (n);
                testare(n,y);
                //fout<<" diug\n";
            }
            else
                back(k+1,n,y);
        }
    }
}

void testare ( int k, int p )
{

    int i,j,sum1=0,maxi=0,sum=0,b[16][16];
    //b=a;
    for ( i=0;i<k;i++)
        for ( j=0;j<p;j++ )
            if (s[i]==-1)
                b[i][j]=-a[i][j];
            else
                b[i][j]=a[i][j];

    for ( i=0;i<p;i++)
    {
        sum=0;
        sum1=0;
        for ( j=0;j<k;j++)
        {

            sum1=sum1-b[j][i];
            sum=sum+b[j][i];
        }
     //   fout<<"\n suma pentru coloana "<<i<<" este "<<sum<<" respectiv "<<sum1<<"\n";
        if ( sum1>sum )
        {
     //       fout<<"\nschimb coloana "<<i<<"\n";
            for ( j=0;j<k;j++ )
            {

                b[j][i]=-b[j][i];
            }
                maxi=maxi+sum1;
        }
        else
            maxi=maxi+sum;
    }

        //    maxi=maxi+s[i]*s[k+j]*a[i][j];

    if ( maxi>maxim )
        maxim=maxi;
    //for(i=0;i<k;i++)
    //    fout<<s[i]<<" ";
    //fout<<"\n pt combinatie maximul este: "<<maxi<<"\n";
    //fout<<"-----------------------------------------------------------------\n";
}

void afisare ( int n )
{
    int i;
    for ( i=0;i<n;i++)
        fout<<s[i]<<" ";
    fout<<"\n";

}