Cod sursa(job #604778)

Utilizator dany123Florea Daniel dany123 Data 25 iulie 2011 10:16:54
Problema Jocul Flip Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.09 kb
//#include<iostream>
#include<fstream>
using namespace std;
int N,M,smax;
int v[16][16];
int w[34], k=0; //w=stiva, 0= nu inmultim cu -1, 1= inmultim cu -1 
				//w[0->N-1] = linii, w[N->M-1] = col
ifstream fin ("flip.in");
ofstream fout ("flip.out");
int s_col (int j) {//suma coloana
	int sum=0;
	for (int i=0;i<N;i++)
		sum+=v[i][j] * ((w[i]==0)?1:(-1)); //suma elementelor col j inmultita cu -1 sau nu
	if (sum<0) { w[N+j]=1; return (sum*(-1)); }
	else {return sum;}
}
int suma () {
	int sum=0;
	for (int j=0;j<M;j++)
		sum+=s_col(j);
	//for (int i=0;i<M+N;i++) cout<<w[i]<<' ';
	//cout<<' '<<sum<<endl;
	return sum;
}
void citire() {
	fin>>N>>M;
	for (int i=0;i<N;i++)
		for (int j=0;j<M;j++)
			fin>>v[i][j];
}
//void afis() {for (int i=0;i<N+M;i++) cout<<w[i]<<' '; cout<<endl;}
int main () {
	citire();
	smax=suma();
	for (int i=0;i<=N+M;i++) w[i]=-1;
	while (k>=0) 
	{
		if (k>=N) k--;
		else if (w[k]<1) 
		{ 
			w[k]++; 
			if (w[N-1]!=-1) {int s=suma(); if (s>smax) smax=s;}
			k++;
		}
		else { w[k]=-1; k--; }
	}
	fout<<smax;
	fout.close();
	return 0;
}