Pagini recente » Cod sursa (job #493249) | Cod sursa (job #611942) | Cod sursa (job #2011754) | Cod sursa (job #1001272) | Cod sursa (job #2035268)
#include <stdio.h>
#include <stdlib.h>
#include <algorithm>
#include <cstring>
using namespace std;
#define MAXN 7294
#define MAXM 14
int a[MAXN][MAXM];
int sumlin[MAXN], scad[MAXN];
inline int nrbiti1(int x) {
int nr=0;
while(x>0) {
x=x&(x-1);
nr++;
}
return nr;
}
int main()
{
int n, m, r, c, i, j, aux, lin, col, nr, sum, maxs;
FILE *fi, *fo;
fi = fopen("elimin.in", "r");
fo = fopen("elimin.out", "w");
fscanf(fi, "%d%d%d%d", &n, &m, &r, &c);
if(n<m) {
for(i=0; i<n; i++)
for(j=0; j<m; j++)
fscanf(fi, "%d", &a[j][i]);
aux=n;
n=m;
m=aux;
aux=r;
r=c;
c=aux;
}
else
for(i=0; i<n; i++)
for(j=0; j<m; j++)
fscanf(fi, "%d", &a[i][j]);
for(i=0; i<n; i++)
for(j=0; j<m; j++)
sumlin[i]+=a[i][j];
nr=1<<m;
maxs=-32000*7294;
for(i=0; i<nr; i++)
if(nrbiti1(i)==c) {
memset(scad, 0, sizeof(scad));
for(col=0; col<m; col++)
if(i&(1<<col)) {
for(lin=0; lin<n; lin++)
scad[lin]+=a[lin][col];
}
for(lin=0; lin<n; lin++)
scad[lin]=sumlin[lin]-scad[lin];
sort(scad, scad+n);
sum=0;
for(lin=r; lin<n; lin++)
sum+=scad[lin];
if(sum>maxs)
maxs=sum;
}
fprintf(fo, "%d", maxs);
fclose(fi);
fclose(fo);
return 0;
}