Pagini recente » Cod sursa (job #2612627) | Cod sursa (job #1408205) | Cod sursa (job #2789517) | Cod sursa (job #3240408) | Cod sursa (job #615290)
Cod sursa(job #615290)
#include <cstdio>
#include <climits>
int n,m, mat[16][16];
int max = -INT_MAX;
int VerificaSuma()
{
int suma = 0;
for(int i =0; i<n;i++)
for(int j = 0; j<m; j++)
suma+=mat[i][j];
return suma;
}
void InmultesteRand(int rand)
{
for(int i =0;i<m;i++)
mat[rand][i]*=(-1);
}
void InmultesteColoana(int coloana)
{
for(int i =0;i<n;i++)
mat[i][coloana]*=(-1);
}
void backtr(int x, int t)
{
int aux[16][16];
for(int i =0; i<n;i++)
for(int j =0; j<m; j++)
aux[i][j] = mat[i][j];
if(x == (n+m))
return;
if(t)
if(x<n)
InmultesteRand(x);
else
InmultesteColoana(x-n);
if(VerificaSuma()>max)
max = VerificaSuma();
for(int i =0;i<2;i++)
{
backtr(x+1, i);
for(int a = 0; a<n; a++)
for(int b = 0; b<m; b++)
mat[a][b] = aux[a][b];
}
}
int main()
{
freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i =0; i<n; i++)
for(int j =0; j<m; j++)
scanf("%d",&mat[i][j]);
backtr(-1, 0);
printf("%d",max);
}