Pagini recente » Cod sursa (job #159223) | Cod sursa (job #2148595) | Cod sursa (job #820883) | Cod sursa (job #3179872) | Cod sursa (job #340294)
Cod sursa(job #340294)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
typedef struct _Matrix{
int n;
int m;
int data[16][16];
} Matrix;
void read_data( Matrix *matrix )
{
int i, j;
FILE *f = fopen( "flip.in", "r" );
fscanf( f, "%i%i", &matrix->n, &matrix->m );
for ( i = 0; i < matrix->n; i++ )
for ( j = 0; j < matrix->m; j++ )
fscanf( f, "%i", &matrix->data[i][j] );
}
void write_response( int response )
{
FILE *f = fopen( "flip.out", "w" );
fprintf( f, "%i", response );
}
int matrix_sum( Matrix *matrix )
{
int sum = 0;
int i, j;
for ( i = 0; i < matrix->n; i++ )
for ( j = 0; j < matrix->m; j++ )
sum += matrix->data[i][j];
return sum;
}
int matrix_sum_line( Matrix *mat, int line )
{
int sum = 0;
int k;
for ( k = 0 ; k < mat->m; k++ )
sum += mat->data[line][k];
return sum;
}
int matrix_sum_column( Matrix *mat, int column )
{
int sum = 0;
int k;
for ( k = 0 ; k < mat->n; k++ )
sum += mat->data[k][column];
return sum;
}
int main()
{
//int max_sum = 0;
int smax = 0, s = 0, t = 0 ;
int i, j, k;
Matrix mat;
read_data( &mat );
for(i=0;i<(1<<mat.m);i++)
{
s=0;
for(k=0;k<mat.n;k++)
{
for(t=j=0;j<mat.m;j++)
if(i&(1<<j))
t+=-mat.data[k][j];
else
t+=mat.data[k][j];
if(t>-t)
s+=t;
else
s+=-t;
}
if(s>smax)
smax=s;
}
/*
for ( j = 0; j < (1 << mat.m); j++ ) {
int this_sum = 0;
for ( k = 0; k < mat.m; k++ ) {
int tt = 0;
for ( i = 0; i < mat.n; i++ ) {
tt += (( (1 < k) & j )? 1 : -1) * mat.data[i][k];
}
if ( tt > 0 )
this_sum += tt;
else
this_sum -= tt;
}
if ( sum < this_sum )
sum =this_sum;
}
*/
/*
for ( ;; ) {
int win_line = 0, win_col = 0;
for ( i = 0; i < mat.n; i++ )
lines[i] = matrix_sum_line( &mat, i );
for ( i = 0; i < mat.m; i++ )
cols[i] = matrix_sum_column( &mat, i );
for ( i = 0; i < mat.n; i++ )
if ( lines[i] < 0 )
win_line += - lines[i];
for ( i = 0; i < mat.m; i++ )
if ( cols[i] < 0 )
win_col += - cols[i];
if ( win_line <= 0 && win_col <= 0 )
break ;
if ( win_line >= win_col ) {
for ( i = 0; i < mat.n; i++ ) {
if ( lines[i] < 0 ) {
for ( j = 0; j < mat.m; j++ )
mat.data[i][j] *= -1;
}
}
sum += 2 * win_line;
}
if ( win_col > win_line ) {
for ( j = 0; j < mat.m; j++ ) {
if ( cols[j] < 0 ) {
for ( i = 0; i < mat.n; i++ )
mat.data[i][j] *= -1;
}
}
sum += 2* win_col;
}
}
*/
write_response( smax );
return 0;
}