Pagini recente » Monitorul de evaluare | Cod sursa (job #2210282) | Cod sursa (job #268403) | Monitorul de evaluare | Cod sursa (job #1376489)
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int A[68][18], Lin[18], Col[18], N, M, rs;
bool u = false;
bool PLinie(int i){
if (Lin[i] < 0){
for (int j = 0; j < N; j++){
A[i][j] = -A[i][j];
Col[j] += 2 * A[i][j];
}
Lin[i] = -Lin[i];
}
else return true;
}
bool PColoana(int i){
if (Col[i] < 0){
for (int j = 0; j < M; j++){
A[j][i] = -A[j][i];
Lin[j] += 2 * A[j][i];
}
Col[i] = -Col[i];
}
else return true;
}
void back(bool k){
if (k){
u = true;
for (int i = 0; i < N; i++) if (!PColoana(i)) u = false;
if (!u) back(false);
}else{
u = true;
for (int j = 0; j<M; j++) if (!PLinie(j)) u = false;
if (!u) back(true);
}
}
int main(){
fin >> M >> N;
for (int i = 0; i<M; i++)
for (int j = 0; j<N; j++){
fin >> A[i][j];
Lin[i] += A[i][j];
Col[j] += A[i][j];
}
back(true);
back(false);
for (int i = 0; i<M; i++) rs += Lin[i];
fout << rs;
return 0;
}