Cod sursa(job #1184220)

Utilizator mihai.plesaPlesa Mihail Iulian mihai.plesa Data 11 mai 2014 19:12:38
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include<fstream>
#include<cmath>
#include<iostream>
using namespace std;
int n,m;
void comutal(int D[17][17],int a[17])
{
    int i,j,s=0;
    for(i=1; i<=n; i++)
        if(a[i]==1)
            for(j=1; j<=m; j++)
            D[i][j]=0-D[i][j];
}
void comutac(int D[17][17],int b[17])
{
    int i,j,s=0;
    for(j=1; j<=m; j++)
        if(b[j]==1)
            for(i=1; i<=n; i++)
            D[i][j]=0-D[i][j];

}
void transfer(int A[17][17],int B[17][17])
{
    int i,j;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        B[i][j]=A[i][j];
}
int suma(int A[17][17])
{
    int i,j,s=0;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        s=s+A[i][j];
    return s;
}
int main()
{
    fstream f,g;
    f.open("flip.in",ios::in);
    g.open("flip.out",ios::out);
    int i,j,A[17][17],s=0,s1,i1,j1,B[17][17],C[17][17];
    long long maxim=-10000000000000;
    f>>n>>m;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        {
            f>>A[i][j];
            B[i][j]=A[i][j];
            C[i][j]=A[i][j];
            s=s+A[i][j];
        }
        cout<<s;

    int a[100]={0},b[100]={0};
    long long x,y,k,ind;
    x=pow(2,n);
    y=pow(2,m);
    for(k=1; k<=x-1; k++)
    {
        s=0;
        transfer(A,B);

        int b[100]={0};
        comutal(B,a);
        for(ind=1; ind<=y-1; ind++)
        {
            transfer(B,C);
            comutac(C,b);
            s=suma(C);
            if(s>maxim)
                maxim=s;
            b[1]++;
            i=1;
            while(b[i]==2)
            {
                b[i]=0;
                b[i+1]=b[i+1]+1;
                i++;
            }
        }
        a[1]++;
        i=1;
        while(a[i]==2)
        {
            a[i]=0;
            a[i+1]=a[i+1]+1;
            i++;
        }


    }
    g<<maxim;
}