Pagini recente » Cod sursa (job #211097) | Cod sursa (job #2471192) | Cod sursa (job #1896476) | Cod sursa (job #2479938) | Cod sursa (job #23314)
Cod sursa(job #23314)
#include<stdio.h>
int n,m,smax=0,s[16];
int a[16][16];
int citire()
{
int i,j;
FILE *f;
f=fopen("flip.in","r");
fscanf(f,"%d %d",&n,&m);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
fscanf(f,"%d",&a[i][j]);
fclose(f);
return 1;
}
int init(int k) {s[k]=s[k-1]; return 1;}
int succesor(int k) {if(s[k]<n) {s[k]++; return 1;} return 0;}
int valid(int k) {
int i;
for(i=1;i<k;i++) if(s[i]==s[k]) return 0;
return 1;
}
int solutie(int k)
{
int ss=0,i,j,si,v[16][16];
for(i=1;i<=n;i++)
for(j=1; j<=m; j++)
v[i][j]=a[i][j];
for(i=1;i<=k;i++)
for(j=1;j<=m;j++) v[s[k]][j]=v[s[k]][j]*(-1);
for(j=1;j<=m;j++)
{
si=0;
for(i=1;i<=n;i++) si=si+v[i][j];
if(si<0) si=si*(-1);
ss+=si;
}
if (ss>smax) {smax=ss; return 1;}
return 0;
}
int tipar (int k)
{
FILE *f;
f=fopen("flip.out","w");
fprintf(f,"%d\n",smax);
fclose(f);
return 1;
}
int main (void)
{
int as,ev,k;
citire();
k=1;
init(k);
while(k>0)
{
do{
as=succesor(k);
if(as) ev=valid(k);
}while(as&&!ev);
if(as)
{
if(solutie(k)) {tipar(k); if(k<n) k++;}
else if(k>n) k--;
else {k++; init(k);}
}
else k--;
}
return 0;
}