Pagini recente » Cod sursa (job #3257321) | Cod sursa (job #1611324) | Cod sursa (job #827134) | Cod sursa (job #2743031) | Cod sursa (job #959092)
Cod sursa(job #959092)
#include <stdio.h>
int n,m,a[200][200];
int max = 0;
void citire()
{
freopen("royfloyd.in","r",stdin);
freopen("royfloyd.out","w",stdout);
int i, j;
scanf("%d",&n);
scanf("%d",&m);
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
{
scanf("%d",&a[i][j]);
max = max + a[i][j];
}
}
void flip_linie(int linie)
{
int i;
for(i = 1;i <= m;i++)
a[linie][i] *= -1;
}
void flip_coloana(int coloana)
{
int i;
for(i = 1;i <= n;i++)
a[i][coloana] *= -1;
}
void check()
{
int i,j;
int check_aux = 0;
for(i = 1;i <= m;i ++)
{
check_aux = 0;
for(j = 1;j <= n;j ++)
check_aux += a[i][j];
if(check_aux < 0)
flip_coloana(i);
}
}
void check_max()
{
int max_aux = 0;
int i,j;
for (i = 1; i <= n; i++)
for (j = 1; j <= n; j++)
max_aux = max_aux + a[i][j];
if(max_aux > max)
max = max_aux;
}
void backtrack(int linia)
{
int i;
for(i = 0; i <= 1; i++)
{
if(!i){
check();
check_max();
if(linia != n)
backtrack(linia + 1);
}
if(i){
flip_linie(i);
check();
check_max();
if(linia != n)
backtrack(linia + 1);
}
}
}
int main()
{
citire();
backtrack(1);
printf("%d\n",max);
}