Pagini recente » Cod sursa (job #2700670) | Cod sursa (job #2402879) | Cod sursa (job #2233689) | Cod sursa (job #1278407) | Cod sursa (job #2195630)
#include <iostream>
#include <fstream>
#define nmax 17
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int N,M,matrice[nmax][nmax], suma,suminit,init[nmax][nmax];
struct date
{
int l,c;
};
date c[nmax];
void restabileste(int linie, int coloana)
{
for(int i =1 ; i <=M; i++)
matrice[linie][i]*=-1;
for(int j =1 ; j <= N; j ++)
matrice[j][coloana]*=-1;
}
int valid(int linie, int coloana)
{
int sum=0;
for(int i =1 ; i <=M; i++)
matrice[linie][i]*=-1;
for(int j =1 ; j <= N; j ++)
matrice[j][coloana]*=-1;
for(int i = 1; i <= N; i ++)
for(int j =1 ; j <= M; j++)
sum+=matrice[i][j];
if(sum>suminit)
{
suminit=sum;
return 1;
}
else
{
restabileste(linie,coloana);
return 0;
}
}
int answer(int l, int col, int k)
{
for(int i = l + 1 ; i <= N; i ++)
for(int j =1 ; j <= M; j++)
{
c[k].l=i;
c[k].c=j;
if(valid(c[k].l,c[k].c))
{
answer(c[k].l,c[k].c,k+1);
}
}
}
int main()
{
fin>>N>>M;;
for(int i = 1 ; i <= N; i ++)
{
for(int j =1 ; j <= M ; j ++)
{
fin>>matrice[i][j];
init[i][j]=matrice[i][j];
suminit+=matrice[i][j];
}
}
answer(0,0,0);
fout<<suminit;
return 0;
}