Cod sursa(job #102626)

Utilizator oumbraPaul Filimoon oumbra Data 14 noiembrie 2007 16:37:37
Problema Jocul Flip Scor 100
Compilator c Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <stdio.h>

int st[20], k, n, m;
int flip[20][20];
int curent[20][20];
int max, maxc;

void clean()
{
	int i, j;

	for(i=0; i<n; i++)
		for(j=0; j<m; j++)
			curent[i][j] = flip[i][j];
}

int main()
{
	int i, fi, f=0, sum;

	freopen("flip.in", "r", stdin);
	freopen("flip.out", "w", stdout);

	scanf("%d %d", &n, &m);

	for(i=0; i<n; i++)
		for(fi=0; fi<m; fi++)
			scanf("%d", &flip[i][fi]);

	st[k] = 0;	
	clean();

	while(k>=0)
	{	
		f = 1;
	        if(st[k] == 0)
        	        st[k] = -1;
		else if(st[k] == -1)
			st[k] = 1;
		else
		{
			f=0;
			k--;
		}
	
		if(st[k] < 2 && k == m-1)
		{
//			for(i=0; i<n; i++)
//				printf("%d ", st[i]);
//			printf("\n");			
			
			for(i=0; i<m; i++)
				for(fi=0; fi<n; fi++)
					curent[fi][i] = flip[fi][i]*st[i];

			maxc = 0;

			for(i=0; i<n; i++)
			{
				sum = 0;	

				for(fi=0; fi<m; fi++)
					sum += curent[i][fi];
				
				if(sum < 0)
				{	
					sum = 0;
					for(fi=0; fi<m; fi++)
					{
						curent[i][fi] *= -1;
						sum += curent[i][fi];
					}
				}

				maxc += sum;
			}

			if(maxc > max)
				max = maxc;
			
			clean();
		}
		else
		{
			if(f)
			{
				k++;	
				st[k] = 0;
			}
		}	
	}

	printf("%d\n", max);
	return 0;
}