Mai intai trebuie sa te autentifici.
Cod sursa(job #558378)
Utilizator | Data | 17 martie 2011 11:24:10 | |
---|---|---|---|
Problema | Jocul Flip | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.24 kb |
#include <cstdio>
using namespace std;
int n,m,a[17][17],b[17][17],sc[17],sc2[17],sl2[17],sl[17],i,j,s,smax,q,t,r,w,z,k,e;
void Citeste()
{
freopen("flip.in","r",stdin);
freopen("flip.out","w",stdout);
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
scanf("%d",&a[i][j]);
b[i][j]=a[i][j];
sc[j]=sc[j]+a[i][j];
sl[i]=sl[i]+a[i][j];
}
}
}
void Schimba(int i,int p)
{
if(p==1);
if(sc[i]<-sc[i])
{
sc2[i]=-sc[i];
for(j=1;j<=n;j++)
{
a[j][i]=-a[j][i];
sl[j]=sl[j]-2*a[j][i];
}
}
else
if(sl[i]<-sl[i])
{
sl2[i]=-sl[i];
for(j=1;j<=n;j++)
{
a[i][j]=-a[i][j];
sc[j]=sc[j]-2*a[i][j];
}
}
}
void Scrie()
{
printf("%d",smax);
}
int main()
{
Citeste();
q=(1<<n);
w=(1<<m);
for(j=1;j<=w;j++)
{
r=0;
t=j;
while(t!=0)
{
r++;
if(t%2==1)
{
Schimba(r,1);
}
t=t/2;
}
for(i=1;i<=q;i++)
{
r=0;
z=i;
while(z!=0)
{
r++;
if(z%2==1)
{
Schimba(r,2);
}
z=z/2;
}
for(k=1;i<=n;i++)
{
s=s+sl[i];
}
if(s>smax)
smax=s;
s=0;
for(k=1;k<=n;k++)
for(e=1;e<=m;e++)
a[k][e]=b[k][e];
}
}
Scrie();
return 0;
}