Cod sursa(job #543330)
#include <stdio.h>
#include <string.h>
int x[2]={-1,1};
int max,N,M,i,j;
int Sr[20],Sc[20],A[20][20],sol[20];
inline void verif()
{
int i,s;
s=0;
for(i=1;i<=N;i++)
s+=sol[i]*Sc[i];
if(s>max) max=s;
}
inline void back(int k)
{
int i;
if(k>N) verif();
else
for(i=0;i<=1;i++)
{
sol[k]=x[i];
back(k+1);
}
}
int main()
{
freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);
scanf("%d%d",&N,&M);
memset(Sr,0,sizeof(Sr));
memset(Sc,0,sizeof(Sc));
memset(A,0,sizeof(A));
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
{
scanf("%d",&A[i][j]);
Sr[j]+=A[i][j];
}
for(i=1;i<=M;i++)
if(Sr[i]<0)
for(j=1;j<=N;j++)
A[j][i]*=-1;
for(i=1;i<=N;i++)
for(j=1;j<=M;j++)
Sc[i]+=A[i][j];
memset(sol,0,sizeof(sol));
max=0;
back(1);
printf("%d\n",max);
return 0;
}