Pagini recente » Atasamentele paginii Profil Diana_C | Diferente pentru planificare/sedinta-20080314 intre reviziile 29 si 28 | Cod sursa (job #110151)
Cod sursa(job #110151)
#include <fstream.h>
long a[17][17],b[17][17];
int n,m,v[17];
long long s,smax;
int verif()
{ int i;
for (i=1;i<=n;i++) if (v[i]==-1) return 1;
return 0;
}
float suma(int j)
{ int i;
float suma=0;
for (i=1;i<=n;i++)
suma+=b[i][j];
return suma;
}
void flip(int j)
{ int i;
for (i=1;i<=n;i++)
b[i][j]=-b[i][j];
}
int main()
{ int i,j;
long aux;
ifstream f("flip.in");
ofstream g("flip.out");
f>>n>>m;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++) f>>a[i][j];
if (n>m)
{ for (i=2;i<=n;i++)
for (j=1;j<=m&&j<i;j++)
{ aux=a[i][j];
a[i][j]=a[j][i];
a[j][i]=aux;
}
aux=n;
n=m;
m=aux;
}
f.close();
for (i=1;i<=n;i++) v[i]=-1;
v[i]=0;
while (verif())
{ for (i=1;i<=n;i++)
{ if (v[i]==0) { v[i]=-1;break;}
else if (v[i]==1) v[i]=-1;
else { v[i]=1;break;}
}
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
b[i][j]=a[i][j]*v[i];
for (j=1;j<=m;j++)
if (suma(j)<0) flip(j);
s=0;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
s+=b[i][j];
if (s>smax) smax=s;
}
g<<smax;
g.close();
return 0;
}