Pagini recente » Cod sursa (job #1339525) | Cod sursa (job #1350042) | Cod sursa (job #1341622) | Cod sursa (job #1614803) | Cod sursa (job #34606)
Cod sursa(job #34606)
#include<fstream>
#include<stdlib.h>
#include<math.h>
using namespace std;
fstream fin,fout;
int M,N,R,C,a[7300],LIN[7300],RR,CC,i;
long smax,scol[7300];
void selectez(int p, int q, int &m){
int i,j,di,dj;
long aux;
i=p;j=q;di=+1;dj=0;
while (i<j){
if (scol[i]<scol[j]){
aux=scol[i];scol[i]=scol[j];scol[j]=aux;
di=1-di;
dj=1-dj;
}
i=i+di;
j=j-dj;
}
m=i;
}
void sortez(int p,int q){
int m;
if (p<q){
selectez(p,q,m);
sortez(p,m-1);
sortez(m+1,q);
}
}
void subm(int k){
int i,l,j;
long s;
if (k>RR){
for (j=0;j<N;j++){
s=0;
for (l=1;l<=RR;l++){
s=s+a[LIN[l]*N+j];
}
scol[j]=s;
}
sortez(0,N-1);
s=0;
for (j=0;j<CC;j++)s=s+scol[j];
if (s>smax)smax=s;
}
else
for (i=LIN[k-1]+1;i<M-RR+k;i++){
LIN[k]=i;
subm(k+1);
}
}
int main(void)
{
fin.open("elimin.in",ios::in);
fout.open("elimin.out",ios::out);
fin>>M>>N>>R>>C;
RR=M-R;
CC=N-C;
for (i=0;i<M*N;i++) fin>>a[i];
smax=0;
LIN[0]=-1;
subm(1);
fout<<smax<<endl;
fin.close();
fout.close();
return 0;
}