Pagini recente » Cod sursa (job #2741481) | Cod sursa (job #2159633) | Istoria paginii runda/wellcodesimulareclasa9-10martie/clasament | Cod sursa (job #2889578) | Cod sursa (job #1972119)
#include<fstream>
using namespace std;
fstream fin("flip.in",ios::in),fout("flip.out",ios::out);
struct for_flip
{
long val;
int pos;
char LorC;
}f[33];
long a[17][17],S=0;
int n,m,nf;
void read(int nl, int nc)
{
int i;
int j;
for(i=1;i<=nl;i++)
for(j=1;j<=nc;j++)
fin>>a[i][j];
}
int flip_go()
{
long s;
int i,j;
nf=0;
for(i=1;i<=n;i++)
{
s=0;
for(j=1;j<=m;j++)
{
s+=a[i][j];
}
if(s<0)
{
nf++;
f[nf].val=s;
f[nf].pos=i;
f[nf].LorC='L';
}
}
for(j=1;j<=m;j++)
{
s=0;
for(i=1;i<=n;i++)
{
s+=a[i][j];
}
if(s<=0)
{
nf++;
f[nf].val=s;
f[nf].pos=j;
f[nf].LorC='C';
}
}
return nf;
}
int min_val(int nr)
{
int i,min_pos=1;
long m=f[1].val;
for(i=2;i<=nr;i++)
{
if(f[i].val<m)
{
min_pos=i;
m=f[i].val;
}
}
return min_pos;
}
void flip(for_flip e)
{
int i,j;
if(e.LorC=='L')
for(j=1;j<=m;j++)
a[e.pos][j]*=(-1);
else
for(i=1;i<=n;i++)
a[i][e.pos]*=(-1);
}
int sum()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
S+=a[i][j];
return S;
}
int main()
{
fin>>n>>m;
read(n,m);
while(flip_go())
{
flip(f[min_val(nf)]);
}
fout<<sum();
return 0;
}