Pagini recente » Cod sursa (job #183076) | Cod sursa (job #943964) | Cod sursa (job #936731) | Statisticile problemei Salvare | Cod sursa (job #200068)
Cod sursa(job #200068)
#include <iostream>
#include <fstream>
#include <vector>
#include <cmath>
using namespace std;
// I'll be fucked if this works
#define MAX_ROWS 16
#define MAX_COL 16
namespace Global {
long maxSum; long matrix[MAX_ROWS][MAX_COL];
unsigned int n, m;
vector<int> row;
vector<int> values;
}
using Global::matrix;
using Global::maxSum;
using Global::m;
using Global::n;
using Global::values;
using Global::row;
void setMaxSum (long sum) { if (sum > maxSum) maxSum = sum; }
long getMaxSum () { return maxSum; }
template<class T>
void show (const vector<T>& v) { for (unsigned int i = 0; i < v.size(); i++) cout << v[i] << " "; cout << endl; }
void readMatrix ()
{
ifstream fin ("flip.in");
fin >> n;
fin >> m;
for (unsigned int i = 0; i < n; i++)
for (unsigned int j = 0; j < m; j++)
fin >> matrix[i][j];
fin.close();
}
long sumColumn (unsigned int column)
{
long sum = 0;
for (unsigned int i = 0; i < n; i++) {
sum += row[i] * matrix[i][column];
}
return sum;
}
void showMatrix ()
{
for (unsigned int i = 0; i < n; i++) {
for (unsigned int j = 0; j < m; j++) {
cout << matrix[i][j] << " ";
}
cout << endl;
}
}
template<class T>
void flipAllRows (vector<T>& result, unsigned int resultSize, unsigned int pos = 0)
{
for (unsigned int i = 0; i < values.size(); i++)
{
result.at(pos) = values[i];
if (pos < resultSize-1) {
flipAllRows (result, resultSize, pos+1);
}
else {
long totalSum = 0;
long colSum = 0;
for (int i = 0; i < m; i++) {
colSum = sumColumn (i);
if (colSum > 0)
totalSum += colSum;
else
totalSum -= colSum;
}
setMaxSum (totalSum);
//show (result);
//show (vector<int>(1, getMaxSum()));
}
}
}
long sumMatrix ()
{
long sum = 0;
for (unsigned int i = 0; i < n; i++) {
for (unsigned int j = 0; j < m; j++) {
sum += matrix[i][j];
}
}
return sum;
}
int main()
{
values.push_back(1);
values.push_back(-1);
readMatrix ();
showMatrix ();
maxSum = sumMatrix ();
row.resize(n);
cout << endl;
flipAllRows (row, n);
ofstream fout ("flip.out");
fout << getMaxSum();
//cout << getMaxSum();
fout.close();
return 0;
}