Cod sursa(job #639960)

Utilizator Sm3USmeu Rares Sm3U Data 24 noiembrie 2011 14:00:51
Problema Jocul Flip Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <stdio.h>
#define max(a,b) ((a>b)?a:b)

using namespace std;

int a[20][20];
int n;
int m;
long long maxim;
int b[64*1024+3][18];
//int c[64*1024+1][17];

void ceva(int n, int b[65549][18])
{
    for(int i=0;i<n;++i)
        b[0][i]=1;
    int k=2<<n;
    for(int i=1;i<k;++i)
    {
        int j=0;
        for(;j<n && b[i-1][j]==-1;b[i][j++]=1);
        b[i][j++]=-1;
        for(;j<n;b[i][j]=b[i-1][j++]);
    }
}

void citire()
{
    scanf("%d %d",&n,&m);
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<m;++j)
        {
            scanf("%d",&a[i][j]);
        }
    }
    ceva(n,b);
    //ceva(m,c);
}

int suma(int x)
{
    int s=0;
    int suma1;
    int suma2;
    for(int j=0;j<m;j++)
    {
        suma1=0;
        suma2=0;
        for(int i=0;i<n;i++)
        {
            suma1+=a[i][j]*b[x][i];
            suma2+=a[i][j]*b[x][i]*(-1);
        }
        if(suma1>suma2)
            s+=suma1;
        else
            s+=suma2;
    }
    return s;

}

void rez()
{
    int N=1<<n;
    //int M=1<<m;
    for(int i=0;i<N;++i)
    {
        maxim=max(maxim,suma(i));
    }
    printf("%d",maxim);
}

int main()
{
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    citire();
    rez();

    return 0;
}