Pagini recente » Cod sursa (job #1242824) | Cod sursa (job #2719409) | Cod sursa (job #2469658) | Cod sursa (job #3033071) | Cod sursa (job #2529818)
#include <iostream>
#include<fstream>
using namespace std;
int x4[15], n4;
int i,j, N,M, a[17][17];
long suma2, summax , sump, sumn;
ifstream f("flip.in");
ofstream g ("flip.out");
void citire()
{
f>>M>>N;
for(i=0; i<M; i++)
for(j=0; j<N; j++)
f>>a[i][j];
}
void minus1( int k)
{
for(j=0; j<=N; j++)
a[k][j]*=-1;
}
void copiere()
{
for(i=0; i<M; i++)
if(x4[i]==1)
{
minus1(i);
x4[i]=0;
}
}
void BackRec4(int k)
{
int p;
for(p=0; p<=1; p++)
{
x4[k]=p;
if (k==M)
{
suma2=0;
copiere(); /// resetare matrice initiala
for(int i2=0; i2<M; i2++) /// inmultire linii cu -1
if(x4[i2]==1)
minus1( i2);
for(int w=0; w<N; w++) /// calculare modul suma elemente pozitive si modul de suma elemente negative, pe fiecare coloana
{
sumn=sump=0; /// initializare suma el poz/neg cu 0
for(j=0; j<M; j++)
if(a[j][w]>=0)
sump+=a[j][w];
else
sumn-=a[j][w];
if(sump-sumn>0) /// calcularea sumei elementelor matricei
suma2+=sump-sumn;
else
suma2-=sump-sumn;
}
if(suma2>summax) /// actualizare suma maxima
summax=suma2;
}
else BackRec4(k+1);
}
}
int main()
{
citire();
for(i=0;i<M;i++) /// initializare suma maxima
for(j=0;j<N;j++)
summax+=a[i][j];
BackRec4(0);
g<<summax;
return 0;
}