Pagini recente » Cod sursa (job #340261) | Istoria paginii runda/quarantine_training_2/clasament | Cod sursa (job #2424960) | Cod sursa (job #2261720) | Cod sursa (job #2079947)
#include<iostream>
#include<fstream>
using namespace std;
long maxSum = 0;
long N, M;
long computeSum(long board[][16]){
long sum = 0L;
for(int i = 0; i < N; ++i){
for(int j = 0; j < M; ++j){
sum += board[i][j];
}
}
return sum;
}
void backTracking(long board[][16], int line, int column, int comuteLine, int comuteColumn){
if(line >= N || column >= M) return;
long newBoard[16][16];
for(int i = 0; i < N; ++i){
for(int j = 0; j < M; ++j){
if(i == line || j == column){
newBoard[i][j] = board[i][j] * comuteColumn * comuteLine;
}
else{
newBoard[i][j] = board[i][j];
}
}
}
long sum = computeSum(newBoard);
if(sum > maxSum){
maxSum = sum;
}
for(int i = 0; i < 2; ++i){
for(int j = 0; j < 2; ++j){
if(i + j > 0){
backTracking(board, line + i, column + j, 1, 1);
backTracking(board, line + i, column + j, 1, -1);
backTracking(board, line + i, column + j, -1, 1);
backTracking(board, line + i, column + j, -1, -1);
}
}
}
}
int main(int argc, char **argv)
{
ifstream inFile("flip.in");
ofstream outFile("flip.out");
int i, j;
inFile >> N >> M;
long board[16][16];
for(i = 0; i < N; ++i)
for(j = 0; j < M; ++j)
inFile >> board[i][j];
backTracking(board, 0, 0, 1, 1);
backTracking(board, 0, 0, 1, -1);
backTracking(board, 0, 0, -1, 1);
backTracking(board, 0, 0, -1, -1);
outFile << maxSum;
inFile.close();
outFile.close();
return 0;
}