Pagini recente » Cod sursa (job #1132148) | Cod sursa (job #2080150) | Cod sursa (job #1549741) | Cod sursa (job #1382150) | Cod sursa (job #2325873)
#include <stdlib.h>
#include <stdint.h>
#include <string>
#include <vector>
#include <iostream>
#include <unordered_map>
#include <memory>
#include <algorithm>
#include <deque>
#include <iterator>
#include <numeric>
#include <assert.h>
#include <cstdlib>
#include <sstream>
#include <fstream>
#define INPUT_PATH ""
#define OUTPUT_PATH ""
void algorithm();
int main()
{
algorithm();
return 0;
}
using namespace std;
namespace
{
typedef vector<int>::iterator intIt;
class RMatrix
{
public:
RMatrix(ifstream& input)
{
input >> m_nrRows;
input >> m_nrCols;
m_matrix.reserve(m_nrRows*m_nrCols);
int readVal = 0;
while (input >> readVal)
{
m_matrix.push_back(readVal);
}
}
int getRows() const
{
return m_nrRows;
}
int getCols() const
{
return m_nrCols;
}
int operator[](int index) const
{
return m_matrix[index];
}
private:
int m_nrCols;
int m_nrRows;
vector<int> m_matrix;
};
void findMaxSum(
int step,
const RMatrix& matrix,
vector<int> colFliped,
int& maxSum)
{
int sum = 0;
for (int row = 0; row < matrix.getRows(); ++row)
{
int rowSum = 0;
for (int col = 0; col < matrix.getCols(); ++col)
{
int idx = row*matrix.getCols() + col;
rowSum += colFliped[col] * matrix[idx];
}
sum += abs(rowSum);
}
maxSum = max(maxSum, sum);
++step;
if (step == matrix.getCols()) return;
colFliped[step] = 1;
findMaxSum(step, matrix, colFliped, maxSum);
colFliped[step] = -1;
findMaxSum(step, matrix, colFliped, maxSum);
}
int findMaxSum(const RMatrix& matrix)
{
int maxSum = 0;
vector<int> colFliped(matrix.getCols(), 1);
const int step = 0;
findMaxSum(step, matrix, colFliped, maxSum);
colFliped[step] = -1;
findMaxSum(step, matrix, colFliped, maxSum);
return maxSum;
}
}
////////////////////////////////////////////////////////////////////////////////
void algorithm()
{
ifstream inputFile(INPUT_PATH "flip.in");
ofstream outputFile(OUTPUT_PATH "flip.out");
RMatrix matrix(inputFile);
int maxSum = findMaxSum(matrix);
outputFile << maxSum;
inputFile.close();
outputFile.close();
}