Pagini recente » Cod sursa (job #2207726) | Cod sursa (job #2115359) | Cod sursa (job #2285831) | Cod sursa (job #1000247) | Cod sursa (job #2210274)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int A[900][900],B[900][900];
struct ran{
int ord,val;
};
bool cmp(ran a,ran b){
return a.val<b.val;
}
ran R[900],C[900],R2[900],C2[900];
long long s=0,s2=0;
int m,n,r,c;
int addc(int e){
int sc=s;
bool ok=true;
for(int i=0;i<n;i++){
C[i].ord=i;
C[i].val=0;
}
for(int i = 0;i<m;i++)
for(int j = 0;j<n;j++){
ok=true;
for(int k=0; k<r-1; k++){
if(i==R[k].ord)
ok=false;
}
if(ok && e!=i){
C[j].val+=A[i][j];
}
}
sort(C,C+n,cmp);
for(int i = 0;i<c;i++)
sc-=C[i].val;
return sc;
}
int addr(int e){
int sc=s2;
bool ok=true;
for(int i=0;i<m;i++){
R2[i].ord=i;
R2[i].val=0;
}
for(int i = 0;i<m;i++){
for(int j = 0;j<n;j++){
ok=true;
for(int k=0; k<c-1; k++)
if(j==C2[k].ord)
ok=false;
if(ok && e!=j){
R2[i].val+=A[i][j];
}
}
}
sort(R2,R2+m,cmp);
for(int i = 0;i<r;i++)
sc-=R2[i].val;
return sc;
}
int main(){
fin>>m>>n>>r>>c;
for (int i = 0;i<m;i++){
R[i].ord = R2[i].ord = i;
for(int j = 0;j<n;j++){
fin>>A[i][j];
s+=A[i][j];
s2+=A[i][j];
if(!i) C[j].ord = C2[j].ord = j;
C2[j].val+=A[i][j];
R[i].val+=A[i][j];
}
}
sort(R,R+m,cmp);
sort(C2,C2+n,cmp);
for(int i = 0;i<c;i++)
s2 -= C2[i].val;
for(int i = 0;i<r;i++)
s-=R[i].val;
int ad=s;
ad=addc(R[r-1].ord);
int i=r;
while(R[i-1].val==R[i].val && i<n){
int sc=addc(R[i].ord);
if(ad<sc)
ad=sc;
i++;
}
s=ad;
ad=addr(C2[c-1].ord);
i=c;
while(C2[i-1].val==C2[i].val && i<m){
int sc=addr(C2[i].ord);
if(ad<sc)
ad=sc;
i++;
}
s2=ad;
fout<<s;
return 0;
}