Cod sursa(job #693493)

Utilizator Victor10Oltean Victor Victor10 Data 27 februarie 2012 13:01:42
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <cstdio>

int cit[21][21], incol[21][21]; //cit- matricea citita; incol- matricea inmultita pe coloane

bool verif (int i, int j){
	if( 1<<j & i ) return 1;
	return 0;
}

int main(){
	
	freopen("flip.in","r",stdin);
	freopen("flip.out","w",stdout);
	
	
	
	int n, m, i, i2, j2, j, k, colbit=0, Smax=0, Scur; //colbit = coloanele care le vom inmulti cu -1
	
	scanf("%d %d",&n,&m);
	for(i=1; i<=n; ++i) for(j=1; j<=m; ++j) scanf("%d",&cit[i][j]);
	
	//printf(" \n%d\n	",1<<m);
	for(; colbit<(1<<m); ++colbit){
		//printf("!c ");
		for(i=0; (1<<i)<colbit*2; ++i){
			//printf("colbit=%d i=%d \n",colbit,i);
			if(verif(colbit, i)){
				//printf("!e "); //AICI
				for(j=1; j<=n; ++j){
					//printf("~ ",j,i);
					incol[j][i+1]= cit[j][i+1] * (-1);
				}
			}
			else{
				for(j=1; j<=n; ++j)
					incol[j][m+i]=cit[j][m+i]; //sau AICI
			}
		}
		
		//printf("! ");
		
		for(i2=1; i2<=n; ++i2){
			Scur=0;
			for(j2=1; j2<=m; ++j2){
				Scur+=incol[i2][j2];
			}
			//printf("colbit=%d \n",colbit);
/*			if(colbit==2){
				printf("Scur=%d \n",Scur);
				for(i2=1; i2<=n; ++i2){
					for(j2=1; j2<=m; ++j2	)
						printf("%d ",incol[i2][j2]);
					printf("\n");
				}
			//	printf("Scur=%d\n",Scur);
			}*/
			if(Scur<0){
				for(j2=1; j2<=m; ++j2){
					incol[i2][j2]*=(-1);
				}
			}
		}
		
		//printf("!a ");
		
		Scur=0;
		if(colbit==2)
		for(i2=1; i2<=n; ++i2)
			for(j2=1; j2<=m; ++j2)
				Scur+=incol[i2][j2];
		
		if(Scur>Smax){
		//	printf("Scur=%d ",Scur);
			Smax=Scur;
		}
		//printf("!b ");
	}
	
	printf("%d\n",Smax);
}