Pagini recente » Cod sursa (job #2598914) | Cod sursa (job #1605856) | Cod sursa (job #1768153) | Cod sursa (job #2483546) | Cod sursa (job #1971058)
#include <iostream>
#include <stdio.h>
#include <algorithm>
using namespace std;
int v[1001];
int el[1001][1001];
int main() {
FILE *fin, *fout;
int n, m, r, c, i, j, k, x, min, a;
long long max=0, st=0, stotal=0;
fin = fopen("elimin.in", "r");
fout = fopen("elimin.out", "w");
fscanf(fin,"%d%d%d%d", &m, &n, &r, &c);
if(n<m)
min=n;
else
min=m;
for(i=1;i<=n;i++){
for(j=1;j<=m;j++){
fscanf(fin,"%d", &el[i][j]);
el[i][0]+=el[i][j];
el[0][j]+=el[i][j];
stotal+=el[i][j];
}
}
a=1;
for(i=1;i<=min;i++){
a*=2;
}
if(min==n){
for(i=1;i<=a;i++){
j=i;
x=0;
st=stotal;
while(j>0){
if((j&1)==1)
x++;
j=j>>1;
}
j=i;
if(x==r){
x=0;
for(k=1;k<=m;k++){
v[k]=el[0][k];
}
while(j>0){
x++;
if((j&1)==1)
for(k=1;k<=n;k++){
v[k]=v[k]-el[x][k];
st-=el[x][k];
}
j=j>>1;
}
sort(v+1,v+m+1);
for(k=1;k<=c;k++){
st-=v[k];
}
for(k=1;k<=m;k++){
v[k]=0;
}
if(st>max)
max=st;
}
}
}
else{
for(i=1;i<=a;i++){
j=i;
x=0;
st=stotal;
while(j>0){
if((j&1)==1)
x++;
j=j>>1;
}
j=i;
if(x==c){
x=0;
for(k=1;k<=n;k++){
v[k]=el[k][0];
}
while(j>0){
x++;
if((j&1)==1)
for(k=1;k<=m;k++){
v[k]-=el[k][x];
st-=el[k][x];
}
j=j>>1;
}
sort(v+1,v+n+1);
for(k=1;k<=r;k++){
st-=v[k];
}
for(k=1;k<=n;k++){
v[k]=0;
}
if(st>max)
max=st;
}
}
}
fprintf(fout,"%lld", max);
fclose(fin);
fclose(fout);
return 0;
}