Cod sursa(job #811390)

Utilizator Marius_mFMI-M2 Marius Melemciuc Marius_m Data 12 noiembrie 2012 02:18:56
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
/*
 * =====================================================================================
 *
 *       Filename:  flip.cpp
 *
 *    Description: http://infoarena.ro/problema/flip  
 *
 *        Version:  1.0
 *        Created:  11/12/2012 01:45:08 AM
 *       Revision:  none
 *       Compiler:  gcc
 *
 *         Author:  YOUR NAME (), 
 *   Organization:  
 *
 * =====================================================================================
 */

#include<iostream>
#include<cstdio>

using namespace std;

class Flip
{
	int a[17][17],n,m,max_S;
	FILE *in,*out;
public:
	Flip();
	int maxMatrix();
	void back(int k);
	void seeValue();
	~Flip();
};

Flip::Flip()
{
	max_S = 0;
	in = fopen("flip.in","r");
	out = fopen("flip.out","w");
	fscanf(in,"%d %d",&n,&m);
	for(int i = 0 ; i < n ; i++)
		for(int j = 0 ; j < m ; j++)
			fscanf(in,"%d",&a[i][j]);
}

int Flip::maxMatrix()
{
	int S = 0,sum_temp;
	for(int i = 0 ; i < n ; i++)
	{
		 sum_temp = 0;
		 for(int j = 0 ; j < m ; j++)
			 sum_temp+=a[i][j];
		 if(sum_temp < 0)
			 sum_temp*=(-1);
		 S+=sum_temp;
	}
	return S;
}

void Flip::back(int k)
{
	if( k == m )
	{
		int sum_matrix_temp = maxMatrix();
		if(sum_matrix_temp > max_S)
			max_S = sum_matrix_temp;
	}
	else
	{
		back(k+1);
		for(int i = 0 ; i < n ; i++)
			a[i][k]*=(-1);
		back(k+1);
	}
}

void Flip::seeValue()
{
	fprintf(out,"%d",max_S);
}

Flip::~Flip()
{
	fclose(in);
	fclose(out);
}

int main()
{
	Flip t;
	t.back(0);
	t.seeValue();
	return 0;
}