Cod sursa(job #1872946)

Utilizator flibiaVisanu Cristian flibia Data 8 februarie 2017 18:13:52
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("flip.in");
ofstream out("flip.out");

int n, m, A[20][20], B[20][20], cur, ans = -1e9, cnt, k, aux;

void cop(){
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= m; j++) B[i][j] = A[i][j];
}

void flipcol(int col){
	for(int i = 1; i <= n; i++) B[i][col] = -B[i][col]; 
}

void fliprow(int row){
	for(int j = 1; j <= m; j++) B[row][j] = -B[row][j];
}

int getsum(int row){
	int ans = 0;
	for(int j = 1; j <= m; j++) ans += B[row][j];
	return ans;
}

int getall(){
	int ans = 0;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= m; j++) ans += B[i][j];
	return ans;
}

int main(){
	in >> n >> m;
	for(int i = 1; i <= n; i++)
		for(int j = 1; j <= m; j++) in >> A[i][j];		
	for(int i = 1; i <= (1 << m); i++){
		cop();
		for(int j = 0; j <= m; j++){
			if(i & (1 << j)){
				flipcol(j+1);	
			}
		}
		for(int j = 1; j <= n; j++)
			if(getsum(j) < 0) fliprow(j);
		ans = max(ans, getall());
	}
	out << ans;
	return 0;
}