Pagini recente » Cod sursa (job #1497883) | Cod sursa (job #2022755) | Cod sursa (job #2482968) | Cod sursa (job #2746700) | Cod sursa (job #1761648)
#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]];
int sq=s-ss;
int sss=ss*(-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(sss+3*sum+a[lin[j]][0]*(-1)>sss)
{
sss+=a[lin[j]][0]*(-1)+3*sum;
sq-=a[lin[j]][0];
sq+=sum;
}
}
if(sss+sq>maxx)maxx=sss+sq;
if(k<nrc)bckc(k+1,si+a[0][col[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<=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;
}