Pagini recente » Istoria paginii runda/pre_oji2011 | Cod sursa (job #1296739) | Cod sursa (job #305418) | Cod sursa (job #1886492) | Cod sursa (job #1761764)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int a[17][17],maxx=0,iff[17],nrl,nrc,n,m,lin[17],col[17],v[17],s;
void bckc(int k,int si)
{
for(int i=v[k-1]+1;i<=m;i++)
{
v[k]=i;
iff[i]=1;
if(k<=m)
{
int ss=si+a[0][i];
int sq=s-ss;
int sss=ss*(-1);
for(int j=1;j<=n;j++)
{
int sum=0;
for(int q=1;q<=m;q++)
if(iff[q]==1)
sum+=a[j][q];
if(sss+3*sum+a[j][0]*(-1)>sss)
{
sss+=a[j][0]*(-1)+3*sum;
sq-=a[j][0];
sq+=sum;
}
}
if(sss+sq>maxx)maxx=sss+sq;
if(k<nrc)bckc(k+1,si+a[0][i]);
}
iff[i]=0;
}
}
int main()
{
int i,j,ssi;
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
fin>>a[i][j];
s+=a[i][j];
a[i][0]+=a[i][j];
a[0][j]+=a[i][j];
}
maxx=s;
ssi=0;
for(i=1;i<=n;i++)if(a[i][0]<0)
ssi+=a[i][0]*(-1);
if(s+ssi*2>maxx)maxx=ssi*2+s;
bckc(1,0);
fout<<maxx;
return 0;
}