Pagini recente » Cod sursa (job #963419) | Cod sursa (job #1978097) | Istoria paginii runda/runda_1_biscuiti_cu_lacuste | Cod sursa (job #1333134) | Cod sursa (job #2034945)
#include <stdio.h>
#include <stdlib.h>
#include <cstring>
#include <algorithm>
using namespace std;
#define MAXN 7295
#define MAXM 15
int a[MAXN][MAXM], aux_a[MAXM][MAXN];
int sumlin[MAXM], scad[MAXM];
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, nr, lin, col, sum, maxs, aux;
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", &aux_a[i][j]);
aux=n;
n=m;
m=aux;
for(i=0; i<n; i++)
for(j=0; j<m; j++) {
a[i][j]=aux_a[m-j-1][i];
sumlin[i]+=a[i][j];
}
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]);
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;
}