Cod sursa(job #373976)

Utilizator GotenAmza Catalin Goten Data 15 decembrie 2009 16:01:48
Problema Jocul Flip Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<fstream.h>

long s,ss,smax,lin[20],col[20],a[20][20];
int n,m,i,k,j,kk,jj,x[20],y[20],uu,u,ii,S;


int main()
{
	ifstream f("flip.in");
	ofstream g("flip.out");
	f>>n>>m;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			f>>a[i][j];
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			lin[i]+=a[i][j];
	for(j=1;j<=m;j++)
		for(i=1;i<=n;i++)
			col[j]+=a[i][j];
	for(i=1;i<=n;i++)
		smax+=lin[i];
	S=smax;
	for(i=1;i<=n;i++)
	{
		for(ii=0;ii<=i;ii++)
			x[ii]=0;
		k=1;
		while(k>0)
		{
			x[k]++;
			if(k==i)
			{
				s=S;
				for(ii=1;ii<=k;ii++)
					s-=2*lin[x[ii]];
				for(j=1;j<=m;j++)
				{
					for(jj=0;jj<=j;jj++)
						y[jj]=0;
					kk=1;
					while(kk>0)
					{
						y[kk]++;
						if(kk==j)
						{
							ss=s;
							for(jj=1;jj<=kk;jj++)
								ss-=2*col[y[jj]];
							uu=0;
							while(y[kk-uu]==m-uu)uu++;
							kk-=uu;
						}
						else 
						{
							kk++;
							y[kk]=y[kk-1];
						}
						if(ss>smax)smax=ss;
					}
				}					
				u=0;
				while(x[k-u]==n-u)u++;
				k-=u;
			}
			else 
			{
				k++;
				x[k]=x[k-1];
			}
		}
	}
	g<<smax;
	return 0;
}