Pagini recente » Cod sursa (job #1731732) | Cod sursa (job #1702564) | Cod sursa (job #1781369) | Monitorul de evaluare | Cod sursa (job #1609749)
#include <iostream>
#include <fstream>
using namespace std;
int n, m , a[18][18], i, j, s1[18], s2[18],nr,p,k, z, x[18], semn;
long long total, maxim;
ifstream fin("flip.in");
ofstream fout("flip.out");
int main()
{
fin >> n >> m;
for( i = 1; i <= n; i++)
for( j = 1; j <= m; j++)
fin >>a[i][j];
k = (1 << m) - 1;
maxim = -(1ll<<60);
//generez toate submultimile de ;a 0 la 2^m-1
for( nr = 0; nr <= k; nr++){
z = nr; //z este o submultime si o transcriu intr-un vect caracteristic
p = 1;
while(z != 0)
{
if(z%2 == 1)
{
x[p] = 1;
}
else
x[p] = 0;
p++;
z /= 2;
}
// calculez sumele pe fiecare lini tinand cont ca toate coloanele corespunzatoare submultimii sunt cu -1
//suma pe o linie se calculeaza considerand toata linia cu (s1) si considerand toata linia cu -(s2)
total = 0;
for( i = 1; i <= n; i++)
{
s1[i] = s2[i] =0;
for(j = 1; j <= m; j++)
{
if( x[j] == 1) semn = -1;
else semn = 1;
s1[i] = s1[i] + semn *a[i][j];
s2[i] = s2[i] - semn*a[i][j];
}
total += max(s1[i], s2[i]); //adaugam la total varianta cea mai mare
}
maxim = max(total, maxim);
}
fout << maxim;
return 0;
}