Cod sursa(job #648738)

Utilizator tzoky07Alexandru Gaman tzoky07 Data 14 decembrie 2011 06:29:59
Problema Jocul Flip Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.61 kb
#include <cstdio>
#include <iostream>
#include <fstream>

using namespace std;

long int sol,total;
int nrLinii,nrColoane;
int a[16][16];
int i,j;
int aux[16];

int value(int a[16],int size)
{
	int s = 0;
	for (int i=1;i<=size;i++)
		s += a[i];
	return s;
}

int flippedValue(int a[16],int size)
{
	int s = 0;
	for (int i=1;i<=size;i++)
		s += -a[i];
	return s;
}

long int back(int n)
{total=0;
	if (n > nrLinii)
		return sol;
	else
	{	
		for ( i=1;i<=nrColoane;i++)
		{   
			for (j=1;j<=nrLinii;j++)
				aux[j] = a[j][i];
			if ( value(aux,nrLinii) > flippedValue(aux,nrLinii) )
			{
				total += value(aux,nrLinii);
			}
			else
			{
				total += flippedValue(aux,nrLinii);
			}
		}
		if (total > sol) {sol = total;}
		cout << "Normal line "<< n << " total : " << total << endl;
		total = 0;
		for ( j=1;j<=nrColoane;j++)
			{
				a[n][j] = -a[n][j];
			}
		for ( i=1;i<=nrColoane;i++)
		{   
			for (j=1;j<=nrLinii;j++)
				aux[j] = a[j][i];
			if ( value(aux,nrLinii) > flippedValue(aux,nrLinii) )
			{
				total += value(aux,nrLinii);
			}
			else
			{
				total += flippedValue(aux,nrLinii);
			}
		}
		for ( j=1;j<=nrColoane;j++)
			{
				a[n][j] = -a[n][j];
			}
		if (total > sol) {sol = total;}
		cout << "Flipped line "<< n << " total : " << total << endl;
		return back(n+1);
	}
}

int main()
{	
	ifstream in; in.open("flip.in");
	in >> nrLinii >> nrColoane;
	for (int i=1;i<=nrLinii;i+=1)
		for (int j=1;j<=nrColoane;j+=1)
			in >> a[i][j];
	in.close();	
		
	
	
	ofstream out; out.open("flip.out");
	out << back(1);	
	out.close();
	return 0;
}