Cod sursa(job #265466)

Utilizator warangeldinu sorin warangel Data 23 februarie 2009 22:21:38
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
long mat[16][16];
long huge max=0;
int sol[256];
int n,m,k=1;
void citire()
{
	freopen("flip.in","r",stdin);
   scanf("%d",&n);
   scanf("%d",&m);
   for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
         scanf("%ld",&mat[i][j]);
}
void do_max()
{
   long mat2[16][16];
   int i,j;
   for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
         mat2[i][j]=mat[i][j];
   long huge max2=0;
   for(i=1;i<=n;i++)
      if(sol[i])
         for(j=1;j<=m;j++)
            mat2[i][j]*=-1;
   for(j=1;j<=m;j++)
      if(sol[n+j])
         for(i=1;i<=n;i++)
            mat2[i][j]*=-1;
   for(i=1;i<=n;i++)
      for(j=1;j<=m;j++)
         max2+=mat2[i][j];
   if(max2>max)max=max2;
}
int add2sol()
{
   int poz=1;
   while(sol[poz]!=0)
      sol[poz++]=0;
   sol[poz]=1;
   return poz<n+m;
}       /*
int gen(long N, long M)
{
	freopen("flip.in", "w", stdout);
	long i,j;
   int x;
   printf("%ld %ld\n",N,M);
	for (i=1;i<=N;i++)
   {
   	for(j=1;j<=M;j++)
   	{x=rand()%2; if(!x)x=-1;printf("%ld ", (rand() % 1000000)*x);}
      printf("\n");
   }
	printf("\n");

	fclose(stdout);

	return 0;
}       */
int main()
{
   //gen(16,16);return 0;
   freopen("flip.out","w",stdout);
   citire();
   while(add2sol())do_max();
   printf("%lld",max);
   return 0;
}