Pagini recente » Cod sursa (job #612300) | Cod sursa (job #2125878) | Cod sursa (job #581855) | Cod sursa (job #665297) | Cod sursa (job #2588276)
#include <fstream>
using namespace std;
ifstream cin ("flip.in");
ofstream cout ("flip.out");
int a[20][20],lin[20],col[20],v1[20],v2[20],v3[20],v4[20];
int main()
{
int n,m,i,j,ii,jj,s,maxx,S,suma1,suma2,suma10,suma11,suma20,suma21,x,y,k1,k2,k3,k4,l,c;
cin>>n>>m;
S=0;
for (i=1; i<=n; i++)
for (j=1; j<=m; j++)
{
cin>>a[i][j];
S=S+a[i][j];
}
for (i=1; i<=n; i++)
{
s=0;
for (j=1; j<=m; j++)
s=s+a[i][j];
lin[i]=s;
}
for (j=1; j<=m; j++)
{
s=0;
for (i=1; i<=n; i++)
s=s+a[i][j];
col[j]=s;
}
maxx=S;
x=((1<<n)-1)/2;
y=((1<<m)-1)/2;
for (i=0; i<=x; i++)
{
suma1=suma2=S;
k1=k2=0;
for (ii=0; ii<n; ii++)
if (((i>>ii)&1)==1)
{
suma1=suma1-2*lin[ii+1];
k1++;
v1[k1]=ii+1;
}
else
{
suma2=suma2-2*lin[ii+1];
k2++;
v2[k2]=ii+1;
}
for (j=0; j<=y; j++)
{
suma11=suma1;
suma10=suma1;
suma21=suma2;
suma20=suma2;
k3=k4=0;
for (jj=0; jj<m; jj++)
if (((j>>jj)&1)==1)
{
suma11=suma11-2*col[jj+1];
suma21=suma21-2*col[jj+1];
k3++;
v3[k3]=jj+1;
}
else
{
suma10=suma10-2*col[jj+1];
suma20=suma20-2*col[jj+1];
k4++;
v4[k4]=jj+1;
}
for (l=1; l<=k1; l++)
{
for (c=1; c<=k3; c++)
suma11=suma11+4*a[v1[l]][v3[c]];
for (c=1; c<=k4; c++)
suma10=suma10+4*a[v1[l]][v4[c]];
}
for (l=1; l<=k3; l++)
{
for (c=1; c<=k3; c++)
suma21=suma21+4*a[v2[l]][v3[c]];
for (c=1; c<=k4; c++)
suma20=suma20+4*a[v2[l]][v4[c]];
}
if (suma11>maxx)
maxx=suma11;
if (suma10>maxx)
maxx=suma10;
if (suma21>maxx)
maxx=suma21;
if (suma20>maxx)
maxx=suma20;
}
}
cout<<maxx;
return 0;
}