Pagini recente » Cod sursa (job #348967) | Cod sursa (job #2766861) | Cod sursa (job #2604477) | Cod sursa (job #2149622) | Cod sursa (job #2371798)
#include<fstream>
#include<iostream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int n,m,i,j,mat[17][17],s,ss;
struct alegere
{
int nr;
char d;
};
alegere v[35];
bool ales[35];
int im[35];
int suma(int k)
{
int sss=0;
int ii;
if(v[k].d=='L')
for(ii=1;ii<=m;ii++)
sss+=mat[v[k].nr][ii];
else
for(ii=1;ii<=n;ii++)
sss+=mat[ii][v[k].nr];
return sss;
}
void comuta(int k)
{
int ii;
ales[k]=true;
ss-=2*suma(k);
if(v[k].d=='L')
for(ii=1;ii<=m;ii++)
mat[v[k].nr][ii]*=-1;
else
for(ii=1;ii<=n;ii++)
mat[ii][v[k].nr]*=-1;
if(s<ss)
s=ss;
}
void decomuta(int k)
{
comuta(k);
ales[k]=false;
}
bool valid(int k)
{
if(suma(k)<0&&!ales[k])
return true;
return false;
}
void back_on_track(int p)
{
comuta(p);
cout<<p<<" ";
for(im[p]=1;im[p]<=n+m;im[p]++)
if(valid(im[p]))
back_on_track(im[p]);
decomuta(p);
}
int main()
{
fin>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{fin>>mat[i][j];
ss+=mat[i][j];}
for(i=1;i<=n;i++)
{
v[i].nr=i;
v[i].d='L';
}
for(i=n+1;i<=n+m;i++)
{
v[i].nr=i-n;
v[i].d='C';
}
for(i=1;i<=n+m;i++)
if(valid(i))
back_on_track(i);
fout<<s;
}