Pagini recente » Cod sursa (job #2325484) | Cod sursa (job #2944499) | Cod sursa (job #2829491) | Cod sursa (job #2718340) | Cod sursa (job #2443960)
#include<iostream>
#include<fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int a[20][20],maxSum=-1000001,v[2]={-1,1};
int swich=0;//verifica daca linia a fost "flipped"
int n,m;
void citire(int &n,int &m,int a[20][20]){
int i,j;
fin>>n>>m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++)
fin>>a[i][j];
a[i][swich]=1;
}
}
void flip_linie(int iaux){
int j;
for(j=1;j<=m;j++)
{
a[iaux][j]*=-1;
}
a[iaux][swich]*=-1;
}
int suma_coloana(int jaux){
int s=0,i;
for(i=1;i<=n;i++)
s+=a[i][jaux];
return s;
}
int backtracking(int k){
for(int i=0;i<=1;i++){
if(a[k][swich]!=v[i]){
int currentSum=0;
flip_linie(k);
for(int j=1;j<=m;j++)
currentSum+=abs(suma_coloana(j));
if(currentSum>maxSum)maxSum=currentSum;
}
if(k<=n-1)
backtracking(k+1);
}
return maxSum;
}
int main(){
int suma=0;
citire(n,m,a);
maxSum=suma;
fout<<backtracking(0);
}