Pagini recente » Cod sursa (job #2915189) | Cod sursa (job #1470742) | Cod sursa (job #3202842) | Cod sursa (job #2735808) | Cod sursa (job #1720431)
#include<stdio.h>
int x;
long maxim;
long verif(int n,int m,long a[20][20])// aici fac suma de pe coloana
{
long sumafinal=0;
int i;
int j;
for(i=0;i<m;i++)
{
long suma=0;
for(j=0;j<n;j++)
suma=suma+a[j][i];
if(suma<0)
suma=suma*(-1);
sumafinal=sumafinal+suma;
}
return sumafinal;
}
int back(int k,int n,int m,long a[20][20])
{
if(k<=x)
{
int j;
int i;
for(j=n-1;j>=0;j--)
if(k&1<<j)//inmultesc liniile corespunzatoare submultimii
{
int i;
for(i=0;i<m;i++)
a[j][i]=a[j][i]*(-1);
}
long sumafinal=verif(n,m,a);
for(j=n-1;j>=0;j--)
if(k&1<<j)
{
int i;
for(i=0;i<m;i++)
a[j][i]=a[j][i]*(-1);
}
if(sumafinal>maxim)
maxim=sumafinal;
back(k+1,n,m,a);
}
else
{ FILE *g;
g=fopen("flip.out","w");
fprintf(g,"%ld",maxim);
return 0;}
}
int main()
{ FILE *f;
f=fopen("flip.in","r");
int n,m;
int i;
int j;
fscanf(f,"%d%d",&n,&m);
long a[20][20];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
fscanf(f,"%ld",&a[i][j]);
x=(1<<n)-1;
back(0,n,m,a);
}