Pagini recente » Cod sursa (job #1520354) | Rating Al Ghabaghbi Anis (al-ghabaghbi_anis) | Rating Siladi Ciprian (cippri11) | Profil LunguPetru | Cod sursa (job #124624)
Cod sursa(job #124624)
#include <stdio.h>
#include <conio.h>
#define MAX 16
int m,n;
long a[MAX][MAX], suma_max;
int st[2*MAX];
void citire()
{
FILE *fin;
fin=fopen("flip.in","rt");
fscanf(fin,"%d %d",&n,&m);
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
fscanf(fin,"%ld",&a[i][j]);
fclose(fin);
}
/*void afisare()
{
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
printf("%3ld ",a[i][j]);
printf("\n");
}
}
*/
int valid(int p)
{
return 1;
}
int final(int p)
{
if (p==n+m) return 1;
return 0;
}
void minus(int l,int c)
{
if (l!=-1)
for(int i=0;i<m;i++)
a[l][i]=-a[l][i];
if (c!=-1)
for(int i=0;i<n;i++)
a[i][c]=-a[i][c];
}
void actualizeaza()
{
long suma_curenta=0;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
suma_curenta+=a[i][j];
if (suma_curenta>suma_max)
suma_max=suma_curenta;
}
void calculeaza()
{
int l,c;
l=c=-1;
for(int i=0;i<n+m;i++)
if(st[i]==1)
{
if(i<n)
l=i;
else c=i-n;
minus(l,c);
//actualizeaza();
}
actualizeaza();
}
void backtrk(int p)
{
for(int k=0;k<2;k++)
{
st[p]=k;
if (valid(p))
if (final(p))
{
//afisare();
//printf("\n");
//nr_sol++;
calculeaza();
}
else
backtrk(p+1);
}
}
void afis()
{
FILE *fout;
fout=fopen("flip.out","wt");
fprintf(fout,"%ld",suma_max);
fclose(fout);
}
int main()
{
//nr_sol=0;
suma_max=-256000000;
citire();
//aux=a;
backtrk(1);
//afisare();
//printf("\n\n\n nr de solutii este: %d",nr_sol);
//printf("\n\n\n suma maxima este: %ld", suma_max);
//getch();
afis();
}