Pagini recente » Cod sursa (job #1098282) | Cod sursa (job #258860) | Cod sursa (job #2065908) | Cod sursa (job #599788) | Cod sursa (job #2198775)
#include<fstream>
using namespace std;
int n,st[100],v[100][100],counter=0,m,temp,x,y,p[100][100],suma,maxim=0;
ifstream cin("flip.in");
ofstream cout("flip.out");
void print(int nivel)
{
suma=0;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
p[i][j]=v[i][j];
}
}
for(int i=1;i<=nivel;++i)
{
if(st[i]>x)
{
for(int j=1;j<=x;j++)
{
p[j][st[i]-x]=p[j][st[i]-x]*(-1);
}
}
if(st[i]<=x)
{
for(int j=1;j<=y;j++)
{
p[st[i]][j]=p[st[i]][j]*(-1);
}
}
}
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
suma=suma+p[i][j];
}
}
if(suma>maxim)
{
maxim=suma;
}
}
bool valid(int nivel)
{
for(int i=1;i<=nivel-1;++i)
if(st[i]==st[nivel])
return false;
return true;
}
void backtr(int nivel)
{
for(int i=st[nivel-1]+1;i<=n;++i)
{
st[nivel]=i;
if(valid(nivel))
{
if(nivel==m)
{
print(nivel);
}
else
{
backtr(nivel+1);
}
}
}
}
int main()
{
cin>>x>>y;
for(int i=1;i<=x;i++)
{
for(int j=1;j<=y;j++)
{
cin>>v[i][j];
}
}
n=x+y;
for(m=1;m<=n;m++)
{
backtr(1);
}
cout<<maxim;
}