Cod sursa(job #639945)

Utilizator Sm3USmeu Rares Sm3U Data 24 noiembrie 2011 13:45:56
Problema Jocul Flip Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <stdio.h>
#define max(a,b) ((a>b)?a:b)

using namespace std;

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

void ceva(int n, int b[65547][17])
{
    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(;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 y)
{
    int s=0;
    for(int i=0;i<n;++i)
    {
        for(int j=0;j<m;++j)
            s+=a[i][j]*b[x][i]*c[y][j];
    }
    return s;
}*/

void rez()
{
    int N=1<<n;
    //int M=1<<m;
    for(int i=0;i<N;++i)
    {
       /* for(int j=0;j<M;++j)
        {
            int s=suma(i,j);
            maxim=max(maxim,s);

        }*/
        int s=0;
        for(int j=0;j<n;j++)
        {
            int suma1=0;
            int suma2=0;
            for(int k=0;k<n;k++)
            {
                suma1+=a[k][j]*b[i][k];
                suma2+=a[k][j]*b[i][k]*(-1);
            }
            s+=max(suma1,suma2);
        }
        maxim=max(maxim,s);
    }
    printf("%d",maxim);
}

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

    return 0;
}