Cod sursa(job #1873037)

Utilizator cyber_ghSoltan Gheorghe cyber_gh Data 8 februarie 2017 19:06:16
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
#include <bits/stdc++.h>

using namespace std;


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

int N,M,A[20][20],ch[20],rs;

int calcsum(int ch[],int x,bool u){
	int p=0;
	for (int i=1;i<=M;i++){
		if (u){
		if (ch[i]) p+=-A[x][i];
		else p+=A[x][i];
		}
		else {
		if (ch[i]) p+=A[x][i];
		else p+=-A[x][i];
		}
	}
	 
	return p;
}

void check(int ch[]){
	
	int partsum=0,sum1=0;
	//for (int i=1;i<=M;i++) cout <<ch[i]<<" ";
	//cout <<endl;
	for (int j=1;j<=M;j++)
		for (int i=1;i<=N;i++) if (ch[j]) sum1+=-A[i][j];
							   else sum1+=A[i][j];
	for (int i=1;i<=N;i++){
		//int x1,x2;
		//x1=calcsum(ch,i,0)
		partsum+=max(calcsum(ch,i,0),calcsum(ch,i,1));
		//cout <<calcsum(ch,i,0)<<" "<<calcsum(ch,i,1)<<endl;
		//cout <<partsum<<endl;
	}
	
	//cout <<sum1<<" "<<partsum<<endl;
	rs=max(rs,max(sum1,partsum));
}


void back(int ch[],int x){
	if (x==M) {
		ch[x]=0;
		check(ch);
		ch[x]=1;
		check(ch);
		return ;
	}
	ch[x]=0;
	back(ch,x+1);
	ch[x]=1;
	back(ch,x+1);
	
	
	
}

int main(){
	fin >>N>>M;
	for (int i=1;i<=N;i++)
	for (int j=1;j<=M;j++) cin >>A[i][j];
	back(ch,1);
	fout <<rs;
	
	
	
	
	return 0;
	
}