Cod sursa(job #3353833)

Utilizator wizardragonWizard Dragon wizardragon Data 12 mai 2026 03:08:30
Problema Elimin Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <bits/stdc++.h>
using namespace std;
int n,m,rr,cc,a[7294],s[7294],s2[7294],sr[15],sol,sumall;
void 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,s2+m);
    reverse(s2,s2+m);
    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];
    }
  }
}
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];
      }
    }
  }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);
  }
  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;
}