Pagini recente » Cod sursa (job #396449) | Cod sursa (job #275342) | Cod sursa (job #1681300) | Cod sursa (job #1609393) | Cod sursa (job #514047)
Cod sursa(job #514047)
#include <fstream>
#include <string>
using namespace std;
long int g_lnMatrix[16][16];
int g_nVerticalSize = 1, g_nHorizontalSize = 1, g_nLargestSum = 0;
string Line = "Line", Column = "Column";
void Flip (const int &rnIndex, string strWhat)
{
for (int iii = 0; iii < ((strWhat == "Line") ? g_nVerticalSize : g_nHorizontalSize); iii++)
((strWhat == "Line") ? g_lnMatrix[iii][rnIndex] : g_lnMatrix[rnIndex][iii]) *= -1;
}
long int CalculateSum ()
{
long int lnSum = 0;
for (int iii = 0; iii < g_nVerticalSize; iii++)
for (int jjj = 0; jjj < g_nHorizontalSize; jjj++)
lnSum += g_lnMatrix[iii][jjj];
return lnSum;
}
void Permutations (int nVertIndex, int nHorizIndex)
{
if (nHorizIndex == g_nHorizontalSize)
{
long int lnSum = CalculateSum ();
if (lnSum > g_nLargestSum)
g_nLargestSum = lnSum;
}
else if (nVertIndex == g_nVerticalSize)
{
Permutations (nVertIndex, nHorizIndex + 1);
Flip (nHorizIndex, Line);
if (CalculateSum () < 0)
return;
Permutations (nVertIndex, nHorizIndex + 1);
}
else
{
Permutations (nVertIndex + 1, nHorizIndex);
Flip (nVertIndex, Column);
Permutations (nVertIndex + 1, nHorizIndex);
}
}
int main ()
{
ifstream in ("flip.in");
in >> g_nVerticalSize >> g_nHorizontalSize;
for (int iii = 0; iii < g_nVerticalSize; iii++)
for (int jjj = 0; jjj < g_nHorizontalSize; jjj++)
in >> g_lnMatrix[iii][jjj];
in.close();
Permutations (0, 0);
ofstream out ("flip.out");
out << g_nLargestSum;
out.close();
return 0;
}