Pagini recente » Cod sursa (job #264173) | Cod sursa (job #575179) | Cod sursa (job #1013253) | Cod sursa (job #826556) | Cod sursa (job #526793)
Cod sursa(job #526793)
#include<cmath>
#include<fstream>
#include<iostream>
using namespace std;
unsigned g_n,g_m;
int **gp_tabla = NULL;
void citeste_din_fisier(const char nume_fisier[])
{
ifstream f(nume_fisier);
if(f.is_open())
{
f>>g_n>>g_m;
int **tabla = new int*[g_n];
for(unsigned i=0;i<g_n;++i)
tabla[i] = new int[g_m];
for(unsigned i=0;i<g_n;++i)
for(unsigned j=0;j<g_m;++j)
f>>tabla[i][j];
gp_tabla = tabla;
}
else
{
cout<<"fisierul "<<nume_fisier<<" nu a putut fi deschis !"<<endl;
}
f.close();
}
long cea_mai_buna_suma_pe_linie(int **tabla, unsigned nr_liniei)
{
long suma1 = 0;
long suma2 = 0;
for(unsigned j=0;j<g_m;++j)
{
suma1 += tabla[nr_liniei][j];
suma2 -= tabla[nr_liniei][j];
}
return (suma1>suma2)?suma1:suma2;
}
int **get_flip(unsigned pattern)
{
int **tabla_cu_flip = new int*[g_n];
for(unsigned i=0;i<g_n;++i)
tabla_cu_flip[i] = new int[g_m];
unsigned coloana_curenta = 0;
while(coloana_curenta < g_m)
{
//0010 = prima coloana neflipped; a doua flipped; a treia neflipped; a patra neflipped
if(pattern & 0x1)
{
for(unsigned i=0;i<g_n;++i)
tabla_cu_flip[i][coloana_curenta] = -gp_tabla[i][coloana_curenta];
}
else
{
for(unsigned i=0;i<g_n;++i)
tabla_cu_flip[i][coloana_curenta] = gp_tabla[i][coloana_curenta];
}
pattern >>= 1;
++coloana_curenta;
}
return tabla_cu_flip;
}
long calculeaza_solutie()
{
long suma = 0;
unsigned nr_iteratii = pow(2, g_m);
for(unsigned pattern_curent = 0;pattern_curent < nr_iteratii;++pattern_curent)
{
long suma_curenta = 0;
int** tabla_curenta = get_flip(pattern_curent);
for(unsigned i=0;i<g_n;++i)
suma_curenta += cea_mai_buna_suma_pe_linie(tabla_curenta, i);
if(suma_curenta > suma)
suma = suma_curenta;
delete[] tabla_curenta;
}
return suma;
}
int main()
{
citeste_din_fisier("flip.in");
ofstream g("flip.out");
g<<calculeaza_solutie();
g.close();
return 0;
}