Cod sursa(job #3322290)

Utilizator mariusharabariMarius Harabari mariusharabari Data 13 noiembrie 2025 12:50:13
Problema Elimin Scor 60
Compilator cpp-64 Status done
Runda Teme Pregatire ACM Unibuc 2013 Marime 1.43 kb
#include <bits/stdc++.h>
using namespace std;

ifstream fin("elimin.in");
ofstream fout("elimin.out");

int n, m, k, a[7295][7295], r, c, f, sr[7295], smax, v[7295];

bool suc(){
    if(f==r||sr[k]>0)
        return 0;
    sr[k]++;
    f+=sr[k];
    //cout<<k <<' '<<sr[k]<<' '<<f<<endl;
    return 1;
}

void rez(){
    int s=0;
    //for(int i=1;i<=n;i++)
      //  cout<<i<<' ' <<sr[i]<<endl;
    for(int j=1;j<=m;j++){
        int sp=0;
        for(int i=1;i<=n;i++)
            sp+=a[i][j]*(1-sr[i]);

        v[j]=sp;
        //cout<<sp<<' ';
    }
    //cout<<endl;
    sort(v+1, v+m+1);
    for(int j=c+1;j<=m;j++)
        s+=v[j];
    if(s>smax)
        smax=s;
    //cout<<s<<' '<<smax<<endl<<endl;
}


int main(){
    ios_base::sync_with_stdio(0);
    fin.tie(NULL);
    fout.tie(NULL);

    fin>>n>>m>>r>>c;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            fin>>a[i][j];

    k=1;
    sr[k]=-1;
    while(k){
        if(k>n-r+f+1){
            sr[k]=0;
                k--;
        }
        if(suc()){
            if(f==r){
                rez();
                f-=sr[k];
                sr[k]=0;
                k--;
            }
            else if(k<n){
                k++;
                sr[k]=-1;
            }
        }
        else{
            f-=sr[k];
            sr[k]=0;
            k--;
        }
    }

    fout<<smax;

    return 0;
}