Pagini recente » Autor necunoscut | Cod sursa (job #556859) | Cod sursa (job #2635556) | Cod sursa (job #1987013) | Cod sursa (job #554625)
Cod sursa(job #554625)
#include <stdio.h>
//fa combinatii de n luate cate k [0 la 16*2 -1]
long matrix[16][16];
int n, m;
long maxim;
void calc_max()
{
long s1=0;
int i, j;
for(i=0; i<n; i++)
for(j=0; j<m; j++)
s1+=matrix[i][j];
if(s1>maxim) maxim = s1;
}
void inmul_matrix(int v[], int k)
{
int i, j;
for (i=0; i<k; i++)
if(v[i]<=n)
{
for (j=0; j<m; j++)
matrix[v[i]-1][j]*=-1;
}
else
{
for (j=0; j<n; j++)
matrix[j][v[i]-n-1]*=-1;
}
calc_max();
for (i=k-1; i>=0; i--)
if(v[i]<=n)
{
for (j=0; j<m; j++)
matrix[v[i]-1][j]*=-1;
}
else {
for (j=0; j<n; j++)
matrix[j][v[i]-n-1]*=-1;
}
}
void combinari(int v[], int n, int k, int i, int r)
{
int j;
if(i==k) {inmul_matrix(v,k);return;}
for(j=r; j<=n; j++)
{
v[i]=j;
combinari(v, n, k, i+1, j+1);
}
}
int main ()
{
int i, j, k;
int v[32];
FILE *fi, *fo;
fi=fopen("flip.in","r");
fo=fopen("flip.out","w");
fscanf(fi,"%d %d", &n, &m);
for(i=0; i<n; i++)
for(j=0; j<m; j++)
fscanf(fi,"%d", &matrix[i][j]);
for(i=1; i<n+m; i++)
combinari(v, n+m, i, 0, 1);
/*
for(k=0; k<n*m; k++)
{
for(i=0; i<n; i++)
{
s1=0;
s2=0;
for(j=0; j<m; j++)
{
s1+=matrix[i][j];
s2+=matrix[i][j]*(-1);
}
if(s2>s1)
for(j=0; j<m; j++)
matrix[i][j]*=-1;
}
for(j=0; j<m; j++)
{
s1=0;
s2=0;
for(i=0; i<n; i++)
{
s1+=matrix[i][j];
s2+=matrix[i][j]*(-1);
}
if(s2>s1)
for(i=0; i<n; i++)
matrix[i][j]*=-1;
}
}
printf("%d", maxim);
*/
fprintf(fo,"%d", maxim);
fclose(fi);
fclose(fo);
}