Pagini recente » Cod sursa (job #863872) | Cod sursa (job #1087897) | Cod sursa (job #480172) | Cod sursa (job #3224378) | Cod sursa (job #47504)
Cod sursa(job #47504)
#include <stdio.h>
int sc[17],sl[17],v[17][17],m,n,sm;
void serci(int k,int scr)
{
int i;
if (k>m+n-2 && scr>sm)
sm=scr;
if (k<n)
{
// leave it be!
serci(k+1,scr);
// invert the damned thingy!
for (i=0; i<m; i++)
{
sc[i]-=2*v[k][i];
v[k][i]=-v[k][i];
}
sl[k]=-sl[k];
serci(k+1,scr+2*sl[k]);
for (i=0; i<m; i++)
{
sc[i]-=2*v[k][i];
v[k][i]=-v[k][i];
}
sl[k]=-sl[k];
}
if (k>=n && k<=m+n-2)
{
// leave it be!
serci(k+1,scr);
// invert the damned thingy!
for (i=0; i<n; i++)
{
sl[i]-=2*v[i][k-n];
v[i][k-n]=-v[i][k-n];
}
sc[k-n]=-sc[k-n];
serci(k+1,scr+2*sc[k-n]);
for (i=0; i<n; i++)
{
sl[i]-=2*v[i][k-n];
v[i][k-n]=-v[i][k-n];
}
sc[k-n]=-sc[k-n];
}
}
int main()
{
int i,j;
FILE *in=fopen("flip.in","r");
fscanf(in,"%d%d",&n,&m);
for (i=0; i<n; i++)
for (j=0; j<m; j++)
{
fscanf(in,"%d",&v[i][j]);
sl[i]+=v[i][j];
sc[j]+=v[i][j];
sm+=v[i][j];
}
fclose(in);
serci(0,sm);
FILE *out=fopen("flip.out","w");
fprintf(out,"%d\n",sm);
fclose(out);
return 0;
}