Pagini recente » Borderou de evaluare (job #1567507) | Cod sursa (job #2359986) | Cod sursa (job #702011) | Cod sursa (job #1957265) | Cod sursa (job #744483)
Cod sursa(job #744483)
#include<stdio.h>
int K,oriz[20],vert[20],m[20][20],kk[20][20],OK,i,j,M,n,max;
void transform()
{
for(int u=1;u<=n;++u)
{
if(oriz[u])
{
for(int h=1;h<=M;++h)
{
m[u][h]=-m[u][h];
}
}
}
for(int u=1;u<=M;++u)
{
if(vert[u])
{
for(int h=1;h<=n;++h)
{
m[h][u]=-m[h][u];
}
}
}
}
void findout ()
{
int S=0;
for(int u=1;u<=n;++u)
for(int h=1;h<=M;++h)
S+=m[u][h];
if(S>max)
max=S;
}
void restore ()
{
for(int u=1;u<=n;++u)
for(int h=1;h<=M;++h)
m[u][h]=kk[u][h];
}
int main ()
{
freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);
scanf("%d%d",&n,&M);
for(i=1;i<=n;++i)
for(j=1;j<=M;++j)
{
scanf("%d",&m[i][j]);
kk[i][j]=m[i][j];
}
i=1;OK=1;K=1;
findout();
while(OK)
{i=1;
OK=0;
while(i<=n)
{
if(oriz[i]==0)
{
OK=1;
oriz[i]=1;
j=1;
K=1;
while(K)
{j=1;
K=0;
while(j<=M)
{
if(vert[j]==0)
{
K=1;
vert[j]=1;
transform ();
findout ();
restore ();
break;
}
else
{
vert[j]=0;
++j;
}
}
}
break;
}
else
{
oriz[i]=0;
++i;
}
}
}
printf("%d",max);
return 0;
}