Pagini recente » Cod sursa (job #501641) | Cod sursa (job #2618343) | Cod sursa (job #19312) | Cod sursa (job #325661) | Cod sursa (job #1241822)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("flip.in");
ofstream out("flip.out");
int s[20],z[20][20],n,k,p,m,sum ,suma[40],q=1,o=1,maxim,t[40];
void
init()
{
s[k]=-1;
}
int succesor()
{
if(s[k]<1)
{
s[k]++;
return 1;
}
else return 0;
}
int
valid()
{
return 1;
}
int
solutie()
{
return
(k==n+m);
}
void
tipar()
{
int tt=1;
for(int i=1; i<=n; i++)
{
if(s[i]==1)
{
t[i]=0;
tt=0;
sum=sum-suma[i];
sum=sum+(suma[i]*(-1));
}
}
int j=n+1;
while( j<=n+m)
{
if((s[j]==1)&&(tt!=0))
{
sum=sum-suma[j];
sum=sum+(suma[j]*(-1));
for(int e=0;e<=n;e++)
{
if(t[e]==0)
{
sum=sum+(z[e][j-n]*(-1));
}
}
}
j++;
}
if(maxim<sum)
maxim=sum;
}
void back()
{
int as;
k=1;
init();
while(k>0)
{
do
{
as=succesor();
}
while(as&&!valid());
if(as)
if(solutie()) tipar();
else
{
k++;
init();
}
else k--;
}
}
int main()
{
int k;
in>>n>>m;
int i , j;
for(i=1; i<=n; i++)
{
for(j=1;j<=m;j++)
{
in>>z[i][j];
sum=sum+z[i][j];
}
}
while(q<=n){
for(j=1;j<=m;j++)
{
suma[q]=suma[q]+z[q][j];
}
q++;
}
while(q<=n+m){
for(j=1;j<=n;j++)
{
suma[q]=suma[q]+z[j][o];
}
q++;
o++;
}
back();
cout<<maxim;
return 0;
}