Pagini recente » Cod sursa (job #1896350) | Cod sursa (job #2321261) | Cod sursa (job #727917) | Cod sursa (job #621587) | Cod sursa (job #1195374)
#include <stdio.h>
#include <iostream>
long long int a[20][20],n,m,max,lin[20],col[20],curent;
long long int Sum()
{
long long int i,j,summ;
summ=0;
for (i=0;i<n;i++)
for (j=0; j<m; j++) summ+=a[i][j];
return summ;
}
void back(){
long long int i,j;
if (curent > max) max=curent;
for (i=0; i<n; i++)
if (lin[i]<0) {
lin[i]*=-1;
curent+=2*lin[i];
for (j=0; j<m; j++) { col[j]-=2*a[i][j]; a[i][j]*=-1;}
back();
for (j=0; j<m; j++) { col[j]+=2*a[i][j]; a[i][j]*=-1;}
curent-=2*lin[i];
lin[i]*=-1;
}
for (j=0; j<m; j++)
if (col[j]<0) {
col[j]*=-1;
curent+=2*col[j];
for (i=0; i<n; i++) { lin[i]-=2*a[i][j]; a[i][j]*=-1; }
back();
for (i=0; i<n; i++) { lin[i]+=2*a[i][j]; a[i][j]*=-1;}
curent-=2*col[j];
col[j]*=-1;
}
}
int main(){
long long int i,j;
freopen("flip.in","r",stdin);
scanf("%lld %lld\n",&n,&m);
for (i=0; i<n; i++){
for (j=0; j<m; j++) {
scanf("%lld", &a[i][j]);
col[j]+=a[i][j];
lin[i]+=a[i][j];
}
scanf("\n");
}
max=Sum();
curent=max;
back();
freopen("flip.out","w",stdout);
printf("%lld",max);
return 0;
}