Pagini recente » Cod sursa (job #816156) | Cod sursa (job #2047167) | Cod sursa (job #2540836) | Cod sursa (job #1102400) | Cod sursa (job #1926)
Cod sursa(job #1926)
#include<fstream.h>
#include<iostream.h>
fstream f("flip.in",ios::in);
fstream g("flip.out",ios::out);
int n,k,m,as,ev,max=-32000,a[20][20],x[40],s,okl=0,okc=0;
int l[17],c[17];
void citire()
{ f>>n>>m;
int i,j,sl,sc;
for(i=1;i<=n;i++)
{sl=0;
for(j=1;j<=m;j++)
{f>>a[i][j]; sl+=a[i][j];}
l[i]=sl; sl=0;
}
for(j=1;j<=m;j++)
{ sc=0;
for(i=1;i<=n;i++)
sc=a[i][j];
c[j]=sc; sc=0;
}
f.close();
}
void init()
{ x[k]=-3;
}
int succesor()
{ if(x[k]<1)
{x[k]+=2;
if(k<=n&&x[k]==1) okl++;
if(k>n&&x[k]==1) okc++;
return 1;}
return 0;
}
int valid()
{ return 1;
}
int solutie()
{ return (k==n+m);
}
void tipar()
{ int i,j,s=0;
if (okl==n)
for(i=1;i<=n;i++)
s+=l[i]*x[i];
else
if(okc==m)
for(i=1;i<=m;i++)
s+=c[i]*x[n+i];
else
{ for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
s+=a[i][j]*x[i]*x[n+j] ;}
if(s>max)
max=s;
}
void back()
{ k=1;
init();
while(k>0)
{ /* do */
as=succesor();
/*if(as)
ev=valid();*/
/*while(!as);*/
if(as)
if(solutie())
tipar();
else
{k++;init();}
else
{k--; if(k<=n&&x[k]==1) okl--;
if(k>n&&x[k]==1) okc--;}
}
}
int main()
{ citire();
back();
g<<max;
g.close();
return 0;
}