Pagini recente » Cod sursa (job #927021) | Cod sursa (job #2926356) | Cod sursa (job #2538057) | Cod sursa (job #1977442) | Cod sursa (job #1542739)
#include <stdio.h>
#define MAX_LAT 16
int mat[ MAX_LAT ][ MAX_LAT ];
int max( int a , int b ) {
if( a > b )
return a;
else
return b;
}
//calculeaza suma tablei noi cu liniile schimbate schimband si coloanele unde este necesar
int suma( int n , int m , int subm ) {
int l , c;
int sCol , sTotal;
sTotal = 0;
for( c = 0 ; c < m ; c++ ) {
sCol = 0;
//calculam suma coloanei
for( l = 0 ; l < n ; l++ )
if( subm & ( 1 << l ) )//linia curenta este schimbata
sCol -= mat[ l ][ c ];
else
sCol += mat[ l ][ c ];
//daca suma coloanei este pozitiva o adaugam asa cum este
if( sCol > 0 )
sTotal += sCol;
//daca suma coloanei este negativa o schimbam astfel incat sa fie pozitiva
else
sTotal -= sCol;
}
return sTotal;
}
int genSume( int n , int m , int subm , int poz ) {
if( poz < n )
return max( genSume( n , m , subm | ( 1 << poz ) , poz + 1 ) ,
genSume( n , m , subm , poz + 1 ) );
//avem optiunea de a schimba linia curenta
//sau de a o lasa cum este
return suma( n , m , subm );
}
int main() {
int n , m;
int l , c , maxS;
FILE *fin = fopen( "flip.in" , "r" );
//citire matrice
fscanf( fin , "%d%d" , &n, &m );
for( l = 0 ; l < n ; l++ )
for( c = 0 ; c < m ; c++ )
fscanf( fin , "%d" , &mat[ l ][ c ] );
fclose( fin );
maxS = genSume( n , m , 0 , 0 );
FILE *fout = fopen( "flip.out" , "w" );
fprintf( fout , "%d" , maxS );
fclose( fout );
return 0;
}