Pagini recente » Cod sursa (job #2480831) | Cod sursa (job #1853399) | Cod sursa (job #1109982) | Rating Ina Stefanescu (BInfo) | Cod sursa (job #602786)
Cod sursa(job #602786)
#include <iostream>
#include <fstream>
#define nmax 17
#define size (sizeof(long)*8)
using namespace std;
int n, m, suma=-100000;
long a[nmax][nmax], b[nmax][nmax];
long st[2*nmax], k;
void reset(){
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
a[i][j] = b[i][j];
}
void citire(){
ifstream in("flip.in");
in >> n >> m;
for(int i=0;i<n;++i)
for(int j=0;j<m;++j)
in >> b[i][j];
in.close();
}
int sm(){
int s=0;
for(int i=0;i<n;++i)
for(int j=0;j<m;++j) s+= a[i][j];
return s;
}
void comuta_linie(int x){
for(int i=0;i<m;++i)
a[x][i] *= -1;
}
void comuta_coloana(int x){
for(int i=0;i<n;++i)
a[i][x] *= -1;
}
void afis(){
ofstream out("flip.out");
out << suma;
out.close();
}
bool valid(int k)
{
if(k>1) return st[k] > st[k-1];
return true;
}
void work(int k)
{
reset();
for(int i=1;i<=k;++i)
if(st[i] <= 16) comuta_coloana(st[i]);
else comuta_linie(st[i]-16);
int s = sm();
if(s>suma)suma = s;
}
void bk(int k){
for(int p=1;p<=32;++p)
{
st[k+1] = p;
if(valid(k+1))
{
work(k+1);
bk(k+1);
}
}
}
void rezolv(){
suma = sm();
bk(0);
}
int main()
{
citire();
reset();
rezolv();
afis();
return 0;
}