Pagini recente » Cod sursa (job #2820945) | Cod sursa (job #1542273) | Cod sursa (job #2903893) | Istoria paginii runda/antr6/clasament | Cod sursa (job #91852)
Cod sursa(job #91852)
#include<stdio.h>
#include<math.h>
long a[16][16],n,m,max,sir[16][16];
void citire (){
freopen ("flip.in","r",stdin);
scanf ("%ld", &n);
scanf ("%ld", &m);
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
scanf("%ld",&a[i][j]);
fclose(stdin);
}
long sum (int l){
long S=0;
for (int i=0;i<16;i++){
long nou=l|(1<<i);
if (l==nou)
for (int ii=0;ii<m;ii++)
a[i][ii]*=-1;}
long P1=0,P2=0;
for (int j=0;j<m;j++){
P1=0;
P2=0;
for (int iii=0;iii<n;iii++){
P1+=a[iii][j];
P2+=-a[iii][j];}
if (P2>P1){
for (int t=0;t<n;t++)
a[t][j]*=-1;}}
for (int o=0;o<n;o++)
for (int p=0;p<m;p++)
S+=a[o][p];
return S;
}
void egalitate(){
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
a[i][j]=sir[i][j];}
void suma (){
long S1=0;
max=0;
for (int i=0;i<pow(2,n);i++) {
S1=sum(i);
egalitate();
if (S1>max)
max=S1;
}
}
int main(){
freopen("flip.out","w",stdout);
citire();
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
sir[i][j]=a[i][j];
suma();
printf("%ld",max);
printf("\n");
fclose(stdout);
return 0;
}