Pagini recente » Cod sursa (job #1423017) | Cod sursa (job #264510) | Cod sursa (job #2809264) | Cod sursa (job #1429695) | Cod sursa (job #1591819)
#include <fstream>
#include <bitset>
using namespace std;
ifstream f("flip.in");
ofstream g("flip.out");
int n,m,a[20][20],b[20][20],st[35],s,smax;
void refacere()
{
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j)
b[i][j]=a[i][j];
}
void switchlinie(int k)
{
for (int j=1; j<=m; ++j) b[k][j]=-b[k][j];
}
void switchcoloana(int k)
{
for (int i=1; i<=n; ++i) b[i][k]=-b[i][k];
}
void solve(int k)
{
//for (int i=1; i<=k; ++i) g<<
refacere();
s=0;
for (int i=1; i<=k; ++i)
{
if (st[i]<=n) switchlinie(st[i]);
if (st[i]>n) switchcoloana(st[i]);
}
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j) s=s+b[i][j];
if (s>smax) smax=s;
}
void Back(int k)
{
if (k>1) solve(k-1);
if (k==n+m+1) return;
for (int i=st[k-1]+1; i<=n+m; ++i)
{
st[k]=i;
Back(k+1);
}
}
int main()
{
f>>n>>m;
for (int i=1; i<=n; ++i)
for (int j=1; j<=m; ++j) f>>a[i][j];
Back(1);
g<<smax<<'\n';
f.close();
g.close();
return 0;
}