Pagini recente » Cod sursa (job #624734) | Cod sursa (job #287190) | Cod sursa (job #2985962) | Cod sursa (job #2426240) | Cod sursa (job #80423)
Cod sursa(job #80423)
#include<stdio.h>
int n,m;
int nr[16][16];
long smax;
struct valori
{long p,n;}l[16],c[16];
FILE *fin,*fout;
void adaugare(int i,int j)
{
if (nr[i][j]>0) {l[i].p+=nr[i][j]; c[j].p+=nr[i][j];}
else {l[i].n+=nr[i][j]; c[j].n+=nr[i][j];}
}
void citire()
{
int i,j;
fin=fopen("flip.in","r");
fout=fopen("flip.out","w");
fscanf(fin,"%d %d",&n,&m);
for (i=0;i<n;i++)
for (j=0;j<m;j++)
{fscanf(fin,"%ld",&nr[i][j]);
adaugare(i,j);
smax+=nr[i][j];
}
fclose(fin);
}
void calculeaza()
{
int i,j,difl,difc,i2,j2;
difl=difc=0;
for (i=0;i<n;i++)
if (-l[i].n-l[i].p>difl) {difl=-l[i].n-l[i].p; i2=i;}
for (j=0;j<m;j++)
if (-c[j].n-c[j].p>difc) {difc=-c[j].n-c[j].p; j2=j;}
if (difl>0 || difc>0)
{if (difl>=difc) {smax-=l[i2].p+l[i2].n;
for (j=0;j<m;j++)
{
l[i2].p-=nr[i2][j];
l[i2].n-=nr[i2][j];
c[j].p-=nr[i2][j];
c[j].n-=nr[i2][j];
}
nr[i2][j]=-nr[i2][j];
smax+=l[i2].p+l[i2].n;
}
else {smax-=c[j2].p+c[j2].n;
for (i=0;i<n;i++)
{
l[i].p-=nr[i][j2];
l[i].n-=nr[i][j2];
c[j2].p-=nr[i][j2];
c[j2].n-=nr[i][j2];
}
smax+=c[j2].p+c[j2].n;
}
calculeaza();
}
}
void afisare()
{
fprintf(fout,"%ld\n",smax);
fclose(fout);
}
void main()
{
smax=0;
citire();
calculeaza();
afisare();
}