Pagini recente » Cod sursa (job #1396110) | Cod sursa (job #336091) | Cod sursa (job #796380) | Cod sursa (job #2099154) | Cod sursa (job #147816)
Cod sursa(job #147816)
#include <stdio.h>
FILE *f=fopen("flip.in","r"), *g=fopen("flip.out","w");
int q,w,n,m,lin[20],x[20][20],y[20][20],z;
long s,max=0;
void init(int k)
{
lin[k]=-1;
}
int succesor(int k)
{
if (lin[k]<1)
{
lin[k]++;
return 1;
}
else return 0;
}
int solutie(int k)
{
return k==n+1;
}
void use()
{
s=0;
for (q=1;q<=n;q++)
if (lin[q])
for (w=1;w<=m;w++)
y[q][w]*=-1;
for (w=1;w<=m;w++)
for (q=1;q<=n;q++)
{
s+=x[q][w];
if (q==n)
{
if (s<0)
{
for (z=1;z<=n;z++)
x[z][w]*=-1;
}
s=0;
}
}
s=0;
for (q=1;q<=n;q++)
for (w=1;w<=m;w++)
{
s+=y[q][w];
y[q][w]=x[q][w];
}
if (s>max) max=s;
}
void back(int k)
{
if (solutie(k)) use();
else
{
init(k);
while (succesor(k))
back(k+1);
}
}
int main()
{
int i,j,k,p,s,min;
fscanf(f,"%d %d",&n,&m);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{
fscanf(f,"%d",&x[i][j]);
y[i][j]=x[i][j];
}
back(1);
fprintf(g,"%ld\n",max);
fclose(g);
return 0;
}