Pagini recente » Cod sursa (job #1750418) | Cod sursa (job #1650997) | Cod sursa (job #2363987) | Cod sursa (job #1806375) | Cod sursa (job #1491925)
#include <iostream>
#include <fstream>
using namespace std;
int st[33], k, n, m, v[17][17], i, j, s, maxim=0, nr, v1[17][17];
int flip()
{
//cout<<"5"<<endl;
for(i=1;i<=n;i++)
{
if(v1[i][0]==1)
for(j=1;j<=m;j++)
v1[i][j]=-v1[i][j];
}
for(j=1;j<=m;j++)
{
if(v1[0][j]==1)
for(i=1;i<=n;i++)
v1[i][j]=-v1[i][j];
}
s=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
s=s+v1[i][j];
//cout<<s<<endl;
return s;
}
int succesor()
{
if (st[k]<2)//pui aici cate nr
{
st[k]++;
return 1;
}
else
return 0;
}
int sol()
{
//cout<<"3"<<endl;
//cout<<k<<endl;
//for(i=1;i<=nr;i++)
//out<<st[i]-1;
//out<<endl<<endl;
return (k==nr);
}
void tipar()
{
//cout<<"4"<<endl;
for(i=1;i<=m;i++)
v[0][i]=st[i]-1;
for(i=m+1;i<=nr;i++)
v[i-m][0]=st[i]-1;
for(i=0;i<=n;i++)
for(j=0;j<=m;j++)
{
v1[i][j]=v[i][j];
//out<<v[i][j];
//if(j==m)
//out<<endl;
}
s=flip();
//cout<<s<<endl;
if(maxim<s)
maxim=s;
}
void bk()
{
//cout<<"1"<<endl;
k=1;
int as;
while (k)
{
//cout<<"2"<<endl;
as=succesor();
if(as)
{
if(sol())
tipar();
else
{
k++;
st[k]=0;
}
}
else k--;
}
}
int main()
{
ifstream input ("flip.in");
ofstream out ("flip.out");
input>>n>>m;
nr=n+m;
//cout<<nr<<endl;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
input>>v[i][j];
}
bk();
out<<maxim;
}