Pagini recente » Cod sursa (job #293571) | Diferente pentru implica-te/arhiva-educationala intre reviziile 33 si 34 | Cod sursa (job #2232764) | Cod sursa (job #750198) | Cod sursa (job #1720409)
#include<stdio.h>
int x;
int maxim;
int verif(int n,int m,int a[n][m])
{
int sumafinal=0;
int i;
int j;
for(i=0;i<m;i++)
{
int suma=0;
for(j=0;j<n;j++)
suma=suma+a[j][i];
if(suma<0)
{for(j=0;j<n;j++)
a[j][i]=a[j][i]*(-1);
suma=suma*(-1);}
sumafinal=sumafinal+suma;
}
return sumafinal;
}
int back(int k,int n,int m,int a[n][m])
{
if(k<=x)
{
int b[n][m];
int j;
int i;
for(j=n-1;j>=0;j--)
if(k&1<<j)
{
int i;
for(i=0;i<m;i++)
b[j][i]=a[j][i]*(-1);
}
else
{
int i;
for(i=0;i<m;i++)
b[j][i]=a[j][i];
}
int sumafinal=verif(n,m,b);
if(sumafinal>maxim)
maxim=sumafinal;
back(k+1,n,m,a);
}
else
{ FILE *g;
g=fopen("flip.out","w");
fprintf(g,"%d",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);
int a[n][m];
for(i=0;i<n;i++)
for(j=0;j<m;j++)
fscanf(f,"%d",&a[i][j]);
x=(1<<n)-1;
back(0,n,m,a);
}