Pagini recente » Cod sursa (job #521321) | Cod sursa (job #1900908) | Cod sursa (job #2772753) | Cod sursa (job #223462) | Cod sursa (job #1662404)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
const long long minim=-17000000;
long long semn[18][18];
long long a[18][18],s,s_max;
long long suma_lin=17000000,suma_col=17000000;
int indice_lin,indice_col;
int n,m;
int val_min;
int v[19]; //pt bkt <3
void citire()
{
int i,j;
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
fin>>a[i][j];
if(n<m)
val_min=n;
else
val_min=m;
}
void calculare_lin()
{
int i,j;
suma_lin=17000000;
long long suma=0;
for(i=1;i<=n;i++)
{
suma=0;
for(j=1;j<=m;j++)
suma+=a[i][j];
if(suma<suma_lin)
{
suma_lin=suma;
indice_lin=i;
}
}
}
void calculare_col()
{
int i,j;
suma_col=17000000;
long long suma=0;
for(j=1;j<=m;j++)
{
suma=0;
for(i=1;i<=n;i++)
suma+=a[i][j];
if(suma<suma_col)
{
suma_col=suma;
indice_col=j;
}
}
}
void schimbare_lin(int linie)
{
int i;
for(i=1;i<=m;i++)
a[linie][i]*=-1;
}
void schimbare_col(int coloana)
{
int i;
for(i=1;i<=n;i++)
semn[i][coloana]*=-1;
}
void init(int k)
{
int i=1,j=1,l;
while(j<=k)
{
while(i<v[j])
{
for(l=1;l<=m;l++)
semn[i][l]=1;
i++;
}
for(l=1;l<=m;l++)
semn[i][l]=-1;
i=v[j];
j++;
}
i=v[k]+1;
while(i<=n)
{
for(l=1;l<=m;l++)
semn[i][l]=1;
i++;
}
}
void verif_col()
{
int i,j;
long long suma=0;
for(j=1;j<=m;j++)
{
suma=0;
for(i=1;i<=n;i++)
suma+=semn[i][j]*a[i][j];
if(suma<0)
schimbare_col(j);
}
}
void calculare()
{
int i,j;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
s+=semn[i][j]*a[i][j];
}
void bkt()
{
int k=1;
while(k>0)
{
v[k]++;
if(v[k]>n)
{
v[k--]=0;
}
else
{
init(k);
verif_col();
s=0;
calculare();
if(s>s_max)
s_max=s;
if(k<n)
{
v[k+1]=v[k];
k++;
}
}
}
}
int main()
{
citire();
bkt();
fout<<s_max;
return 0;
}