Pagini recente » Monitorul de evaluare | Cod sursa (job #1511231) | Cod sursa (job #2010949) | Istoria paginii utilizator/anamariasimionas | Cod sursa (job #2013047)
#include<stdio.h>
#include<algorithm>
#define MAXN 17
#define INF 1000000000
void bkt(int cap,int size);
int sum();
FILE*fin,*fout;
int mat[MAXN][MAXN];
bool flipped[MAXN];
int N,M;
int ans;
int main()
{
fin=fopen("flip.in","r");
fout=fopen("flip.out","w");
fscanf(fin,"%d%d",&N,&M);
for(int i=1;i<=N;i++)
{
for(int j=1;j<=M;j++)
{
fscanf(fin,"%d",&mat[i][j]);
}
}
ans=sum();
bkt(1,1);
fprintf(fout, "%d\n", ans);
fclose(fin);
fclose(fout);
return 0;
}
void bkt(int cap,int size)
{
if(size==N+1)
{
return;
}
if(cap==N+1)
{
return;
}
for(int i=cap;i<=N;i++)
{
flipped[i]=1;
int s=sum();
printf("%d\n",s);
if(ans<s)
{
ans=s;
}
bkt(i+1,size+1);
flipped[i]=0;
}
}
int sum()
{
int bestsum=0;
for(int i=1;i<=M;i++)
{
int colsum=0;
for(int j=1;j<=N;j++)
{
if(flipped[j])
{
colsum-=mat[j][i];
}
else
{
colsum+=mat[j][i];
}
}
bestsum+=std::max(colsum,-colsum);
}
return bestsum;
}