Cod sursa(job #1262780)

Utilizator cociorbaandreiAndrei Cociorba cociorbaandrei Data 13 noiembrie 2014 15:55:53
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <iostream>
#include <algorithm>
#include "stdio.h"
using namespace std;
int N, M;
int matrix[17][17], smax = -1000000000;

int suma()
{
	int temp = 0;
	for(int i = 0; i < N;i++)
		for(int j = 0; j < M;j++)
			temp += matrix[i][j];
	return temp;
}

void comutaLinia(int row)
{
	for(int i = 0;i < M;i++)
			matrix[row][i] = - matrix[row][i];
}
void comutaColoana(int col)
{
	for(int i = 0;i < N;i++)
			matrix[i][col] = - matrix[i][col];
}
void aplicaConfiguratia(int* conf)
{
	int t_itr = 0;
	for(int i = 0;i < N;i++)
		if(conf[t_itr++]) comutaLinia(i);
	
	for(int i = 0;i < M;i++)
		if(conf[t_itr++]) comutaColoana(i);
	
}
void back(int* v, int p, int n)
{
	if(p == n){
		aplicaConfiguratia(v);
		int s = suma();
		smax = (s > smax) ? s : smax;
	}else{
		for(int i = 0; i < 2;i++){
			v[p] = i;
			back(v,p+1,n);
		}
	}
}
int main() {
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	scanf("%d%d",&N,&M);
	for(int i = 0; i < N;i++){
		for(int j = 0; j < M;j++)
			scanf("%d",&matrix[i][j]);
	}
	
	int asd[50];

	back(asd,0,M+N + 1);
	printf("%d",smax);
	return 0;
}