Pagini recente » Rating Muresan Cristian (christu) | Cod sursa (job #301104) | Cod sursa (job #142734) | Cod sursa (job #2206747) | Cod sursa (job #256808)
Cod sursa(job #256808)
#include<stdio.h>
#include<string.h>
#define S 20
int N,M,v[S][S],a[S][S],bst;
int bit(int x,int nr_bit )
{
if( (x & (1<<nr_bit)) != 0 )
return 1;
return 0;
}
void schimbaLinie(int x)
{
int i;
for (i=0; i<N; ++i)
a[x][i] = -a[x][i];
}
void schimbaColoana(int x)
{
int i;
for (i=0; i<M; ++i)
a[i][x] = -a[i][x];
}
int suma()
{
int i, j, sum = 0;
for (i = 0; i < M; ++i)
for (j = 0; j < N; ++j)
sum += a[i][j];
return sum;
}
int main()
{
int l, r, k, cnt;
freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);
scanf("%d%d",&M,&N);
for(int i=0;i<M;++i)
for(int j=0;j<N;++j)
scanf("%d",&v[i][j]);
for (int i=0;i <= (1<<M)-1; ++i)
for (int j=0; j <= (1<<N)-1; ++j)
{
memcpy(a,v,sizeof(a));
// am o submultime de linii: i
// pentru fiecare element k din submultimea i, inmultesc cu -1 linia k
for (k = 0; k < M; ++k)
if (bit(i, k) == 1)
schimbaLinie(k);
// fac acelasi lucru pentru coloane
for (k = 0; k < N; ++k)
if (bit(j, k) == 1)
schimbaColoana(k);
cnt = suma();
if (bst < cnt)
bst = cnt;
}
printf("%d\n", bst);
return 0;
}