Pagini recente » Cod sursa (job #359066) | Cod sursa (job #2952653) | Cod sursa (job #2685555) | Istoria paginii runda/simulare.wellspecial2/clasament | Cod sursa (job #2210548)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int A[900][900];
struct ran{
int ord,val;
};
bool cmp(ran a,ran b){
return a.val<b.val;
}
ran C[900];
int R[900],I[900];
long long s=0,sf=0;
int m,n,r,c;
void solve(int k){
if (k<r){
if(k){
for(int i = I[k-1]+1;i<m;i++){
I[k]=i;
solve(k+1);
}
} else{
for(int i = 0;i<m;i++){
I[k]=i;
solve(k+1);
}
}
}else{
long long sc=s;
for(int i = 0;i<r;i++){
sc-=R[I[i]];
}
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;k++){
if(i==I[k])
ok=false;
}
if(ok){
C[j].val+=A[i][j];
}
}
sort(C,C+n,cmp);
for(int i = 0;i<c;i++)
sc-=C[i].val;
if(sc>sf) sf=sc;
}
}
int main(){
fin>>m>>n>>r>>c;
for (int i = 0;i<m;i++){
for(int j = 0;j<n;j++){
fin>>A[i][j];
s+=A[i][j];
R[i]+=A[i][j];
}
}
solve(0);
fout<<sf;
return 0;
}