Pagini recente » Cod sursa (job #2057975) | Rating Mosteanu Alina Mihaela (floridemai) | Cod sursa (job #1852747) | Cod sursa (job #2197148) | Cod sursa (job #2239434)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in ("flip.in");
ofstream out ("flip.out");
int c[50][50], n, m, val_max, st[101], k, as, st2[100], k2, as2;
int _suma (int c[][50], int dim_ln, int dim_cl)
{
int sum = 0, d[50][50];
for( int a=1; a<=dim_ln; ++a)
for( int b=1; b<=dim_cl; ++b)
d[a][b] = c[a][b];
for( int a=1; a<=dim_ln; ++a)
if( st[a] == -1 )
for( int b=1; b<=dim_cl; ++b)
d[a][b] *= -1;
for( int a=1; a<=dim_cl; ++a)
if( st2[a] == -1 )
for( int b=1; b<=dim_ln; ++b)
d[b][a] *= -1;
for(int a=1; a<=dim_ln; ++a)
for(int b=1; b<=dim_cl; ++b)
sum += d[a][b];
return sum;
}
void _stage_1 ()
{
in >> n;
in >> m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
in >> c[i][j];
}
}
}
int _succesor (int st[], int lim, int indice)
{
if( indice <= lim && st[indice] > -1 )
{
st[indice] -= 2;
return 1;
}
return 0;
}
void _back_2 ()
{
k2 = 1;
st2[k2] = 3;
while( k2 )
{
do{
as2 = _succesor(st2,m,k2);
}while( as2 && !1 );
if( as2 )
if( k2 == m )
{
if( _suma(c,n,m) > val_max )
val_max = _suma(c,n,m);
}
else
st2[++k2] = 3;
else
--k2;
}
}
void _back_1 ()
{
val_max = 0;
if( _suma(c,n,m) > val_max )
val_max = _suma(c,n,m);
k = 1;
st[k] = 3;
while( k )
{
do{
as = _succesor(st,n,k);
}while( as && !1 );
if( as )
if( k == n )
_back_2();
else
st[++k] = 3;
else
--k;
}
}
int main()
{
_stage_1 ();
_back_1 ();
out << val_max;
in.close();
out.close();
return 0;
}