Pagini recente » Cod sursa (job #861503) | Cod sursa (job #3201065) | Cod sursa (job #353991) | Cod sursa (job #592224) | Cod sursa (job #114705)
Cod sursa(job #114705)
#include <stdio.h>
#include <malloc.h>
int i,j,m,n,p=0;
long max;
long **a, **b;
int *x;
FILE *f, *g;
void prelSol(long **b)
{
int i;
long s=0;
a=(long**) malloc (n*sizeof(long));
for (i=0; i<n; i++)
a[i]=(long*) calloc (m,sizeof(long));
f=fopen("D:\\flip.in","r");
fscanf(f,"%d %d",&n, &m);
for (i=0; i<n; i++)
for (j=0; j<m; j++)
fscanf(f,"%ld",&a[i][j]);
b=a;
/* fprintf(g,"a initial\n");
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
fprintf(g,"%ld ",a[i][j]);
fprintf(g,"\n");
}
fprintf(g,"gata cu a\n");
fprintf(g,"b initial\n");
for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
fprintf(g,"%ld ",b[i][j]);
fprintf(g,"\n");
}
fprintf(g,"gata cu b\n");
for (i=0; i<m+n; i++)
fprintf(g,"%d ",x[i]);
fprintf(g,"\n");
*/
for (i=0; i<n; i++)
if (x[i]==0)
for (j=0; j<m; j++)
b[i][j]=b[i][j]*(-1);
for (j=0; j<m; j++)
if (x[n+j]==0)
for (i=0; i<n; i++)
b[i][j]=b[i][j]*(-1);
/*/ for (i=0; i<n; i++)
{
for (j=0; j<m; j++)
fprintf(g,"%ld ",b[i][j]);
fprintf(g,"\n");
}*/
s=0;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
s+=b[i][j];
if (s>max)
{
max=s;
}
// fprintf(g,"gata prelSol\n");
}
void back()
{
int k;
long **b=(long**) malloc (n*sizeof(long));
for (i=0; i<n; i++)
b[i]=(long*) calloc (m,sizeof(long));
for (k=0; k<m+n; k++)
x[k]=-1;
k=0;
while (k>=0)
if (k==n+m)
{
prelSol(b);
k--;
}
else if (x[k]<1)
{
x[k]++;
k++;
}
else
{
x[k]=-1;
k--;
}
}
int main()
{
// FILE *f, *g;
max=0;
f=fopen("flip.in","r");
fscanf(f,"%d %d",&n, &m);
x=(int*) malloc ((m+n)*sizeof(int));
a=(long**) malloc (n*sizeof(long));
for (i=0; i<n; i++)
a[i]=(long*) calloc (m,sizeof(long));
for (i=0; i<n; i++)
for (j=0; j<m; j++)
fscanf(f,"%ld",&a[i][j]);
g=fopen("flip.out","w");
back();
fprintf(g,"%ld",max);
return 0;
}