Cod sursa(job #1171314)

Utilizator StefanFaibla blah StefanFai Data 15 aprilie 2014 15:51:00
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <fstream>
#include<iostream>

using namespace std;

void reverse(int a[17][17], int n, int m, int nr, int &s) {
	int i, j;
	if ( nr < 0 ) {
		j = -nr;
		for ( i = 1; i <= n; i++ ) {
			s = s - 2*a[i][j];
			a[i][j] = -a[i][j];
		}
		
	}
	else if(nr>0){
		i = nr;
		for ( j = 1; j <= m; j++ ) {
			s = s - 2*a[i][j];
			a[i][j] = -a[i][j];
		}
	}
}

void back(int a[17][17], int x[34], int n, int m, int k, int &maxim, int &s, int i)
{
	for ( i = i + 1; i <= n; i++ )
		if(i!=0)
	  {
		  if ( k <= n + m) {
			  reverse(a,n,m,i,s);
			  if ( s > maxim )
				  maxim = s;
			  back(a,x,n,m,k+1,maxim,s,i);
			  reverse(a,n,m,i,s);
		  }
	  }
}

int main()
{
	int n, m, a[17][17], x[34], maxim = 0, s;
	
	ifstream f("flip.in");
	f >> n >> m;
	
	int i, j;
	for ( i = 1; i <= n; i++ )
		for( j = 1; j <= m; j++ )
			{
				f >> a[i][j];
				maxim = maxim + a[i][j];
			}
	f.close();
	
	s=maxim;
	back(a,x,n,m,1,maxim,s,-m-1);
	
	ofstream g("flip.out");
	
	g<<maxim;
	
	g.close();
	
	return 0;
}