Pagini recente » Cod sursa (job #2112550) | Cod sursa (job #2643424) | Cod sursa (job #934142) | Cod sursa (job #27643) | Cod sursa (job #292611)
Cod sursa(job #292611)
#include<fstream.h>
ifstream intrare("flip.in");
ofstream iesire("flip.out");
long int a[17][17],maxim;
int n,m,sol[35];
void citeste()
{
intrare>>n>>m;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
intrare>>a[i][j];
a[0][j]+=a[i][j];
a[i][0]+=a[i][j];
}
}
}
long int calculeaza()
{
long int s=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
if(sol[i]==sol[n+j])s+=a[i][j];
else s-=a[i][j];
}
}
//if(maxim<s)maxim=s;
return s;
}
void back1(int k,long int s)
{
if(k==n+m+1)
{
if(s>maxim)maxim=s;
}
else
{
sol[k]=0;
back1(k+1,s);
sol[k]=1;
for(int i=1;i<=n;i++)
if(sol[i]==0)s-=2*a[i][k-n];
else s+=2*a[i][k-n];
back1(k+1,s);
}
}
void back(int k,long int s)
{
if(k==n+1)back1(k,s);
else
{
sol[k]=1;
back(k+1,s-2*a[k][0]);
sol[k]=0;
back(k+1,s);
}
}
int main()
{
citeste();
maxim=-10000;
long int s=0;
for(int i=1;i<=n;i++)
s+=a[i][0];
back(1,s);
iesire<<maxim;
return 0;
}