Cod sursa(job #2079947)

Utilizator IulianBobocBoboc Iulian IulianBoboc Data 2 decembrie 2017 01:38:27
Problema Jocul Flip Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.7 kb
#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;
}