Pagini recente » Cod sursa (job #3347056) | Cod sursa (job #3355330) | Cod sursa (job #2918061) | Cod sursa (job #3307035) | Cod sursa (job #3353840)
#include <bits/stdc++.h>
using namespace std;
int n,m,rr,cc,a[7294],s[7294],sr[15],sol,sumall,o[7294],b[7294];
bool cmp(int i,int j) {
return s[i]>s[j];
}
void bkt(int pos,int go) {
if(n-go+pos<rr||sumall<=sol){
return;
}
if(pos==rr) {
if(cc==0){
sol=sumall;
return;
}
nth_element(o,o+(m-cc),o+m,cmp);
int now=0;
if(m-cc<cc) {
for(int i=0;i<m-cc;i++){
now+=s[o[i]];
}
}else{
now=sumall;
for(int i=m-cc;i<m;i++) {
now-=s[o[i]];
}
}
sol=max(sol,now);
return;
}
for(int row=go;row<n;row++){
sumall-=sr[row];
for(int c=0;c<m;c++) {
s[c]-=a[row*m+c];
}
bkt(pos+1,row+1);
sumall+=sr[row];
for(int c=0;c<m;c++) {
s[c]+=a[row*m+c];
}
}
}
bool cmpc(int i,int j){
return sr[i]<sr[j];
}
signed main() {
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
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];
sr[i]+=a[i*m+j];
}
}
}else{
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) {
cin>>a[j*n+i];
sr[j]+=a[j*n+i];
}
}
swap(n,m);
swap(rr,cc);
}
for(int i=0;i<n;i++) {
o[i]=i;
}
sort(o,o+n,cmpc);
for(int i=0;i<n;i++){
for(int j=0;j<m;j++) {
b[i*m+j]=a[o[i]*m+j];
}
}
for(int i=0;i<n*m;i++) b[i]=a[i];
for(int i=0;i<n;i++) sr[i]=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];
}
}
bkt(0,0);
cout<<sol<<"\n";
return 0;
}