Pagini recente » Cod sursa (job #2845188) | Cod sursa (job #1014526) | Cod sursa (job #3213511) | Cod sursa (job #294177) | Cod sursa (job #1761194)
#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<=nrc;i++)
{
v[k]=i;
iff[i]=1;
if(k<=nrc)
{
int ss=si+a[0][col[i]]*(-1);
for(int j=1;j<=nrl;j++)
{
int sum=0;
for(int q=1;q<=nrc;q++)
if(iff[q]==1)sum+=a[lin[j]][col[q]];
if(ss+sum+a[lin[j]][0]*(-1)>ss)ss+=sum+a[lin[j]][0]*(-1);
}
if(s+ss*2>maxx)maxx=ss*2+s;
if(k<nrc)bckc(k+1,si+a[0][col[i]]*(-1));
}
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<=m;i++)
if(a[0][i]<0){
nrc++;
col[nrc]=i;
}
for(i=1;i<=n;i++)if(a[i][0]<0)
{
ssi+=a[i][0]*(-1);
nrl++;
lin[nrl]=i;
}
if(ssi>maxx)maxx=ssi;
bckc(1,0);
fout<<maxx;
return 0;
}