Pagini recente » Cod sursa (job #2567369) | Monitorul de evaluare | Cod sursa (job #2567556) | Cod sursa (job #3353830) | Cod sursa (job #3353832)
#include <bits/stdc++.h>
using namespace std;
int a[7294];
signed main() {
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
int n,m,rr,cc;
cin>>n>>m>>rr>>cc;
if(n<m){
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) {
cin>>a[i*m+j];
}
}
}else{
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) {
cin>>a[j*n+i];
}
}
swap(n,m);
swap(rr,cc);
}
vector<int> s(m,0),s2(m,0),sr(n,0);
int sol=0,sumall=0;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
sr[i]+=a[i*m+j];
s[j]+=a[i*m+j];
sumall+=a[i*m+j];
}
}
function<void(int,int)>bkt=[&](int row,int dlt){
if(dlt+n-row<rr||sumall<=sol){
return;
}
if(row==n){
for(int c=0;c<m;c++){
s2[c]=s[c];
}
sort(s2.rbegin(),s2.rend());
int now=0;
for(int i=0;i<m-cc;i++){
now+=s2[i];
}
sol=max(sol,now);
return;
}
bkt(row+1,dlt);
if(dlt+1<=rr){
sumall-=sr[row];
for(int c=0;c<m;c++) {
s[c]-=a[row*m+c];
}
bkt(row+1,dlt+1);
sumall+=sr[row];
for(int c=0;c<m;c++) {
s[c]+=a[row*m+c];
}
}
};
bkt(0,0);
cout<<sol<<"\n";
return 0;
}