Cod sursa(job #1244922)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 18 octombrie 2014 13:45:00
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include<stdio.h>
using namespace std;
int l[17],c[17],a[17][17];
int main(){
    freopen("flip.in","r",stdin);
    freopen("flip.out","w",stdout);
    int n,m,x,y,i,j,s,max=-1,x1,y1;
    scanf("%d%d",&m,&n);
    for(i=1;i<=m;i++)
        for(j=1;j<=n;j++)
            scanf("%d",&a[i][j]);
    x1=m/2+m%2;
    y1=n/2+n%2;
    for(i=1;i<=m;i++)
        l[i]=1;
    for(i=1;i<=n;i++)
        c[i]=1;
    for(i=0;i<=(1<<(x1+y1))-1;i++){
        for(j=0;j<x1+y1;j++){
            if((i>>j)&1==1)
                if(j<x1)
                    l[j+1]=-1;
                else
                    c[j+1-x1]=-1;
            else
                if(j<x1)
                    l[j+1]=1;
                else
                    c[j+1-x1]=1;
        }
        s=0;
        for(x=1;x<=m;x++)
            for(y=1;y<=n;y++)
                s=s+a[x][y]*l[x]*c[y];
        if(s>max)
            max=s;
        for(x=1;x<=m;x++)
            l[x]*=-1;
        s=0;
        for(x=1;x<=m;x++)
            for(y=1;y<=n;y++)
                s=s+a[x][y]*l[x]*c[y];
        if(s>max)
            max=s;
        for(x=1;x<=n;x++)
            c[x]*=-1;
        s=0;
        for(x=1;x<=m;x++)
            for(y=1;y<=n;y++)
                s=s+a[x][y]*l[x]*c[y];
        if(s>max)
            max=s;
        for(x=1;x<=m;x++)
            l[x]*=-1;
        s=0;
        for(x=1;x<=m;x++)
            for(y=1;y<=n;y++)
                s=s+a[x][y]*l[x]*c[y];
        if(s>max)
            max=s;
        for(x=1;x<=n;x++)
            c[x]*=-1;
    }
    printf("%d",max);
    return 0;
}