Cod sursa(job #799892)

Utilizator D4n13LMuntean Dan Iulian D4n13L Data 20 octombrie 2012 12:34:22
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include<fstream>
using namespace std;
int max(int a,int b){return a<b ? b:a;}
ifstream in("flip.in");
ofstream out("flip.out");
int mat[20][20],n,m,smax=-1000000,sol[20];
void bkt(int);
void schimb(int);
void sumamax(int);
void actualizaresuma();
int main()
{
	int i,j,s=0;
	in>>n>>m;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
		{
			in>>mat[i][j];
			s+=mat[i][j];
		}
	for(i=1;i<=n;i++)
	{
		bkt(1);
		if(smax>s)
			s=smax;
		schimb(i);
		bkt(1);
		if(smax>s)
			s=smax;
		schimb(i);
	}
		
	if(s>smax)
		out<<s;
	else out<<smax;
	return 0;
}
void schimb (int i)
{
	for(int j=1;j<=m;j++)
	{
		mat[i][j]*=-1;
	}
}
void bkt(int p)
{
	if(p-1==m)
	{
		actualizaresuma();
		return;
	}
	sumamax(p);
	bkt(p+1);
}

void sumamax(int p)
{
	int i,s=0,k=0;
	for(i=1;i<=n;i++)
		s+=mat[i][p];
	for(i=1;i<=n;i++)
	{
		int a=mat[i][p]*(-1);
		k+=a;
	}
	sol[p]=max(s,k);
}
void actualizaresuma()
{
	int i,s=0;
	for(i=1;i<=m;i++)
		s+=sol[i];
	smax=s;
}