Cod sursa(job #1701782)
| Utilizator | Data | 14 mai 2016 02:21:46 | |
|---|---|---|---|
| Problema | Jocul Flip | Scor | 20 |
| Compilator | c | Status | done |
| Runda | Arhiva de probleme | Marime | 2.14 kb |
#include <stdio.h>
#include <stdlib.h>
int i;
int flip(int** a,int n,int m,int max,int n1)
{
if(n1<=n)
{
int i,j,s=0,max2=0;
for(i=n1; i<n; i++)
{
for(j=0; j<m; j++)
{
s=s+a[i][j];
}
if (s<0)
{
for(j=0; j<m; j++)
{
a[i][j]*=-1;
}
}
max=flip(a,n,m,max,n1+1);
max=flip2(a,n,m,max,0);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
max2+=a[i][j];
}
}
if (max2>max)
{
max=max2;
}
return max;
}
}
}
int flip2(int** a,int n,int m,int max,int m1)
{
if (m1<=m)
{
int i,j,s=0,max2=0;
for(j=m1; j<m; j++)
{
for (i=0; i<n; i++)
{
s=s+a[i][j];
}
if (s<0)
{
for(i=0; i<n; i++)
{
a[i][j]*=-1;
}
}
max=flip2(a,n,m,max,m1+1);
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
max2+=a[i][j];
}
}
if (max2>max)
{
max=max2;
}
return max;
}
}
}
int main()
{
FILE *in,*out;
in=fopen("flip.in","rt");
out=fopen("flip.out","wt");
int n,m,i,j,max=0;
fscanf(in,"%i%i",&n,&m);
int **tb;
tb=(int**)malloc(n*sizeof(int*));
for(i=0; i<n; i++)
{
tb[i]=(int*)malloc(m*sizeof(int));
}
for(i=0; i<n; i++)
{
for(j=0; j<m; j++)
{
fscanf(in,"%i",&tb[i][j]);
max+=tb[i][j];
}
}
max=flip(tb,n,m,max,0);
fprintf(out,"%i",max);
fclose(in);
fclose(out);
for (i=0; i<n; i++)
{
free(tb[i]);
}
free(tb);
return 0;
}
