Cod sursa(job #422168)

Utilizator darrenRares Buhai darren Data 22 martie 2010 11:47:11
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include<fstream>
using namespace std;

void read();
void back(int k);
void doit();
void write();

int n,m;
int a[17][17],b[17][17],smax=-30000;
int chs[17];

int main() {
	read();
	back(1);
	doit();
	write();
	return 0;
}

void read() {
	ifstream fin("flip.in");
	fin>>n>>m;
	for (int i=1;i<=n;++i)
		for (int j=1;j<=m;++j)
			fin>>a[i][j];
	fin.close();
}

void back(int k) {
	int i,j,l;
	for (i=chs[k-1]+1;i<=n;++i) {
		chs[k]=i;
		for (j=1;j<=n;++j)
			for (l=1;l<=m;++l)
				b[j][l]=a[j][l];
		for (j=1;j<=k;++j)
			for (l=1;l<=m;++l)
				b[chs[j]][l]*=-1;
		doit();
		if (k==n)
			return;
		else
			back(k+1);
	}
}

void doit() {
	int i,j;
	int sn,sp,sact=0;
	for (j=1;j<=m;++j) {
		sp=sn=0;
		for (i=1;i<=n;++i)
			if (b[i][j]>0)
				sp+=b[i][j];
			else sn+=b[i][j];
		sn*=-1;
		if (sn>sp)
			sact+=sn-sp;
		else
			sact+=sp-sn;
	}
	if (sact>smax)
		smax=sact;
}

void write() {
	ofstream fout("flip.out");
	fout<<smax;
	fout.close();
}