Pagini recente » Cod sursa (job #2754761) | Cod sursa (job #2110351) | Cod sursa (job #94671) | Cod sursa (job #1871317) | Cod sursa (job #22234)
Cod sursa(job #22234)
//Flip
#include <stdio.h>
int m,n;
long int a[500][18];
void flip_lin(int i){
for(int j=1;j<=m;++j)
a[i][j]=-(a[i][j]);}
void flip_col(int j){
for (int i=1;i<=n;i++)
a[i][j]=-(a[i][j]);}
long int sum_lin(int i){
int j;
long sum=0;
for(j=1;j<=m;++j){
sum+=a[i][j];
}
return sum;
}
long int sum_tot(int *st){
int i,j;
long sum=0;
for(i=1;i<=m;++i){
if(st[i]==1) flip_col(i);}
for(i=1;i<=n;++i){
if(sum_lin(i)<=0) {a[i][0]=1;flip_lin(i);}
}
for(i=1;i<=n;++i)
for(j=1;j<=m;++j)
sum+=a[i][j];
for(i=1;i<=n;++i){
if(st[i]==1) flip_col(i);
if (a[i][0]) flip_lin(i);a[i][0]=0;}
return sum;
}
void init(int k,int *st)
{ st[k]=-1; }
int succesor(int k,int *st)
{if(st[k]<1){++st[k];return 1;}
return 0; }
int valid(int k,int *st)
{return 1; }
int solutie(int k)
{
if(k==m){
return 1;};
return 0;}
void citire(){
FILE *in;
in=fopen("flip.in","r");
fscanf(in,"%d %d",&n,&m);
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
fscanf(in,"%ld",&a[i][j]); }
}
int main(){
int st[18];
long int suma=0,x=0,k=1,as,ev;
citire();
init(k,st);
while(k>0)
{
do {
as=succesor(k,st);
if(as) ev=valid(k,st);
} while(as&&!ev);
if(as) if(solutie(k)){x=sum_tot(st);
if(x>suma)suma=x;}
else {k++;init(k,st);}
else k--;
}
FILE *out;
out=fopen("flip.out","w");
fprintf(out,"%ld",suma);
return 0;
}