Pagini recente » Cod sursa (job #3201112) | Cod sursa (job #2693963) | Cod sursa (job #2318087) | Cod sursa (job #2986640) | Cod sursa (job #7072)
Cod sursa(job #7072)
#include <stdio.h>
#include <stdlib.h>
#define NMAX 201
FILE *f = fopen("elimin.in","rt"), *g = fopen("elimin.out","wt");
int i,j,k,a[NMAX][NMAX],n,m,r,c,sc[NMAX],sl[NMAX],mc[NMAX],ml[NMAX],s,smax;
int mask[NMAX];
void citire()
{
fscanf(f,"%ld %ld %ld %ld",&n,&m,&r,&c);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
{fscanf(f,"%ld",&a[i][j]);sl[i]+=a[i][j];sc[j]+=a[i][j];}
}
int cmp(const void *x, const void *y)
{return * (long int *) x - * (long int *) y;}
int next()
{
i=r;
while (mask[i]==n-r+i)
i--;
if (i==0) return 1;
mask[i]++;
i++;
for (;i<=r;i++)
mask[i]=mask[i-1]+1;
return 0;
}
void solve()
{long int gata=0;
for (i=1;i<=r;i++)
mask[i]=i;
smax=0;
while (!gata)
{
for (i=1;i<=n;i++)
ml[i]=sl[i];
for (i=1;i<=n;i++)
mc[i]=sc[i];
for (i=1;i<=r;i++)
{ml[mask[i]]=0;
for (j=1;j<=m;j++)
mc[j]-=a[mask[i]][j];
}
qsort(mc,m+1,sizeof(int),cmp);
s=0;
for (i=c+1;i<=m;i++)
s+=mc[i];
if (s>smax)
smax=s;
gata=next();
}
fprintf(g,"%d",smax);
}
int main()
{
citire();
solve();
fclose(f);
fclose(g);
return 0;
}