Pagini recente » Cod sursa (job #2861070) | Cod sursa (job #2072118) | Cod sursa (job #3268092) | Cod sursa (job #2572170) | Cod sursa (job #2115681)
#include <iostream>
#include <fstream>
#include <math.h>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int N, M, Sum, mat[20][20], x[40], s[2]={1,-1};
/*
void afisare()
{
int sol = 0;
for(int i = 0 ; i < N ; i++)
for(int j = 0 ; j < M ; j++)
sol += x[i+1]*x[N+j+1]*mat[i][j];
Sum = ( Sum > sol)? Sum : sol;
}
void BKT(int k)
{
if( k == N+M+1 )
afisare();
else
for(int l = 0 ; l < 2 ; l++)
{
x[k] = s[l];
BKT(k+1);
x[k] = 0;
}
}
*/
void afisare_faster()
{
int sol = 0;
for(int i = 0 ; i < N ; i++)
{
int sol_i = 0;
for(int j = 0 ; j < M ; j++)
sol_i += x[j+1]*mat[i][j];
sol += fabs(sol_i);
}
Sum = ( Sum > sol)? Sum : sol;
}
void BKT_faster(int k)
{
if( k == M+1 )
afisare_faster();
else
for(int l = 0 ; l < 2 ; l++)
{
x[k] = s[l];
BKT_faster(k+1);
x[k] = 0;
}
}
int main()
{
f >> N >> M;
if( N < M ) swap(N,M);
for(int i = 0 ; i < N ; i++)
for(int j = 0 ; j < M ; j++)
f >> mat[i][j];
BKT_faster(1);
g << Sum;
return 0;
}