Cod sursa(job #390196)

Utilizator SzabiVajda Szabolcs Szabi Data 3 februarie 2010 11:58:22
Problema Jocul Flip Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <stdio.h>

int m,n;
int a[17][17];
short mb[17],nb[17];

void nullaz(short v[17],short i,int h){
int ii;
for(ii=1;ii<=h;ii++){v[ii]=i;}
}

void szamol(short v[17],short poz,short mit,short k){
int temp;
temp=(v[poz]+mit)/2;
v[poz]=(v[poz]+mit)%2;
if((temp!=0)&&(poz+1<=k)){szamol(v,poz+1,temp,k);}

}

int osszeg(short v[17],short k){
int sum=0,i;
for(i=1;i<=k;i++){
sum+=v[i];
}
return sum;
}

int main(){
freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);
int i,j,max=-858993460,sum;
	
	scanf("%d %d",&m,&n);


mb[1]=-1;nb[1]=-1;


for(i=1;i<=m;i++){
	for(j=1;j<=n;j++){
scanf("%d",&a[i][j]);
	}}

do{
	szamol(mb,1,1,m);
	do{
		szamol(nb,1,1,n);
		sum=0;
		for(i=1;i<=m;i++){
			for(j=1;j<=n;j++){
				if(((mb[i])&&(nb[j]))||((!mb[i])&&(!nb[j]))){sum+=a[i][j];}else{
				sum-=a[i][j];}

			}
		}
		if(sum>max){max=sum;};
	}while(osszeg(nb,n)<n);
nullaz(nb,0,n);
}while(osszeg(mb,m)<m);

printf("%d",max);

return 0;
}