Pagini recente » Cod sursa (job #818858) | Cod sursa (job #328563) | Cod sursa (job #2219153) | Cod sursa (job #317092) | Cod sursa (job #27804)
Cod sursa(job #27804)
#include<fstream.h>
ifstream f("flip.in");
ofstream g("flip.out");
float t[20][20],t2[40][40];
int m,n,st[20];
long long s=-500000;
void citire()
{
int i,j;
f>>m>>n;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
f>>t[i][j];
f.close();
}
void flipuieste()
{
int i,j;
long long sn=0,sp=0,stot=0;
stot=0;
for(i=1;i<=m;i++)
{
sn=sp=0;
for(j=1;j<=n;j++)
if((t[i][j]*st[j])<0)sn+=-t[i][j]*st[j];
else sp+=t[i][j]*st[j];
if(sp<sn)stot+=sn-sp;
else stot+=sp-sn;
}
if(stot>s)s=stot;
}
void back(int k)
{
if(k>n)flipuieste();
else
for(int i=1;i>=-1;i-=2)
{
st[k]=i;
back(k+1);
}
}
void flipuieste2()
{
int i,j;
long long sn=0,sp=0,stot=0;
stot=0;
for(i=1;i<=m;i++)
{
sn=sp=0;
for(j=1;j<=n;j++)
if((t2[i][j]*st[j])<0)sn+=-t2[i][j]*st[j];
else sp+=t2[i][j]*st[j];
if(sp<sn)stot+=sn-sp;
else stot+=sp-sn;
}
if(stot>s)s=stot;
}
void back2(int k)
{
if(k>n)flipuieste2();
else
for(int i=1;i>=-1;i-=2)
{
st[k]=i;
back2(k+1);
}
}
void transpunere()
{
int i,j;
float aux[20][20];
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
t2[i][j]=t[j][i];
}
int main()
{
citire();
int ok=1;
if(n>m)
{
transpunere();
int aux;
aux=n;
n=m;
m=aux;
ok=0;
}
if(ok)
{
back(1);
}
else back2(1);
g<<s;
g.close();
return 0;
}