Pagini recente » Cod sursa (job #3192438) | Cod sursa (job #3162050) | Cod sursa (job #445137) | Cod sursa (job #2254895) | Cod sursa (job #2096462)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int n, m, a[17][17], st[17], b[17][17], sumaMaxima;
void citire(){
f>>n>>m;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
f>>a[i][j];
}
void afisare(int k){
for(int i=1; i<=k; i++)
g<<st[i]<<" ";
g<<endl;
}
int sumaC(int c){
int s=0;
for(int i=1; i<=n; i++)
s+=a[i][c];
return s;
}
void flipC(int c){
for(int i=1; i<=n; i++)
b[i][c]*=(-1);
}
void flipL(int l){
for(int j=1; j<=m; j++)
b[l][j]*=(-1);
}
void reset(){
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
b[i][j]=a[i][j];
}
int sumaTotala(int a[17][17]){
int s=0;
for(int i=1; i<=n; i++)
for(int j=1; j<=m; j++)
s+=a[i][j];
return s;
}
void updateS(){
reset();
for(int i=1; i<=n; i++)
if(st[i] == -1) flipL(i);
for(int j=1; j<=m; j++)
if(sumaC(j)<0) flipC(j);
int suma = sumaTotala(b);
if(suma > sumaMaxima)
sumaMaxima = suma;
}
void backt(){
int k=1;
st[k]=-3;
while(k)
if(st[k]<1){
st[k]+=2;
if(k==n)
updateS();
else
st[++k]=-3;
}
else
k--;
}
int main()
{
citire();
sumaMaxima = sumaTotala(a);
backt();
g<<sumaMaxima;
return 0;
}