Pagini recente » Borderou de evaluare (job #2407839) | Cod sursa (job #1014395)
#include <cstdio>
int a[17][17];
bool v[17];
void comut( int m) {
int i,j;
for( i = 0; i < 17; ++i)
if( v[i] == 1 )
for( j = 0; j < m; ++j )
a[i][j] *= -1;
}
int main () {
FILE *f, *g;
f = fopen( "flip.in", "r" );
g = fopen( "flip.out", "w" );
int n, m, i, j, p, ci, poz, s, z, s1, s2, max = -1;
fscanf( f, "%d%d", &n, &m );
for( i = 0; i < n; ++i)
for( j = 0; j < m; ++j )
fscanf( f, "%d", &a[i][j] );
p = 1 << n;
for( z = 1; z < p; ++z)
{
ci = z;
poz = 0;
for( i = 0; i < 17; ++i )
v[i] = 0;
while( ci )
{
if( ci & 1) v[poz] = 1;
++poz;
ci >>= 1;
}
comut( m );
s = 0;
for( j = 0; j < m; ++j ){
s1 = s2 = 0;
for( i = 0; i < n; ++i ){
s1 += a[i][j];
s2 += ( a[i][j] * -1 );
}
s += s1 > s2 ? s1 : s2;
}
if( s > max )
max = s;
comut( m );
}
fprintf( g, "%d\n", max );
fclose( f );
fclose( g );
return 0;
}