Pagini recente » Cod sursa (job #2132640) | Cod sursa (job #1555836) | Cod sursa (job #418715) | Cod sursa (job #334724) | Cod sursa (job #1760980)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
long long c[18],l[18],nrl=0,nrc=0,a[18][18],col[18],lin[18],maxx,s;
int solutie(int linii,int coloane)
{
int i,sum=0,ss;
ss=s;
for(i=1;i<=linii;i++)
{
ss-=a[lin[l[i]]][0];
sum+=(a[lin[l[i]]][0]*(-1));
}
for(i=1;i<=coloane;i++)
{
ss-=a[0][col[c[i]]];
sum+=a[0][col[c[i]]]*(-1);
for(int j=1;j<=linii;j++)sum+=a[lin[l[j]]][col[c[i]]];
}
return sum+ss;
}
void bkl(int k,int kk)
{
int numar;
if(k==1 || k==0)
numar=0;
else numar=l[k-1];
for(int i=numar+1;i<=nrl;i++)
{
l[k]=i;//linii
if(k<=nrl)
{
if(solutie(k,kk)>maxx)maxx=solutie(k,kk);
if(k==nrl)return;
else
bkl(k+1,kk);
}
}
}
void bkc(int k)
{
int numar;
if(k==0 || k==1)
numar=0;
else numar=c[k-1];
for(int i=numar+1;i<=nrc;i++)
{
c[k]=i;//coloane
if(k<=nrc)
{
bkl(0,k);
if(k==nrc)
return;
else
bkc(k+1);
}
}
}
int main()
{
int n,m,i,j;
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;
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)
{
nrl++;
lin[nrl]=i;
}
bkc(0);
fout<<maxx;
return 0;
}