Cod sursa(job #65041)

Utilizator cezarikVarduca Cezar Dan cezarik Data 6 iunie 2007 19:30:17
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
//100 de puncte
#include<stdio.h>
#include<math.h>
#include<string.h>
FILE*f=fopen("flip.in","r");
FILE*g=fopen("flip.out","w");
long st[17],n,a[17][17],m,p,b[17][17],solmax,sum,sc[17];
void read()
	{
	int i,j;
	fscanf(f,"%ld %ld",&n,&m);
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
		       {
			fscanf(f,"%ld",&a[i][j]);
			solmax+=a[i][j];
			sc[j]+=a[i][j];
			}
	sum=solmax;
	}
void repr_binara(long x)
	{
	p=0;
	while(x!=0)
		{
		st[++p]=x%2;
		x/=2;
		}
	}
void flip()
	{
	int i,s=0,j,smax=0,slocala;
	slocala=sum;
	for(i=1;i<=p;++i)
	   if(st[i]==1)
		{
		s=0;
		slocala=slocala-2*sc[i];
		}
	smax=slocala;
	if(solmax<smax) solmax=smax;
	smax=0;
	for(i=1;i<=n;++i)
	       {
	       s=0;
	       for(j=1;j<=m;++j)
		    if(st[j]==1) s-=a[i][j];
		    else s+=a[i][j];
	       if(s<0) smax-=s;
	       else smax+=s;
	       }
	if(solmax<smax) solmax=smax;
	}
int main()
	{
	read();
	int i;
	for(i=1;i<=pow(2,m)-1;++i)
	       {
	       repr_binara(i);
	       flip();
	       }
	fprintf(g,"%ld",solmax);
	return 0;
	}