Cod sursa(job #2242347)

Utilizator pionierul22aNa LiZa pionierul22 Data 18 septembrie 2018 15:48:48
Problema Elimin Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.25 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int n,m,r,c,total,summax;
int t[1001][1001],l[1001];

void find(int sum)
{
    for(int j=1;j<=n;j++)l[j]=t[0][j];
    sort(l+1,l+n+1);
    for(int j=1;j<=c;j++)
        sum-=l[j];
    if(sum>summax)
        summax=sum;
}

void back(int i,int last, int s)
{
    if(i==r)
    {
        find(s);
        return;
    }
    else
    for(int j=last+1;j<=m;j++)
    {
       for(int k=1;k<=n;k++)
            t[0][k]-=t[j][k];
        back(i+1,j,s-t[j][0]);
        for(int k=1;k<=n;k++)
            t[0][k]+=t[j][k];
    }
    return;
}

int main()
{
    fin>>m>>n>>r>>c;
    if(m<=n)
    for(int i=1;i<=m;i++)
    for(int j=1;j<=n;j++)
        {
            fin>>t[i][j];
            t[i][0]+=t[i][j];
            t[0][j]+=t[i][j];
            total+=t[i][j];
        }
    else{
        for(int i=1; i<=m; i++)
        for(int j=1; j<=n; j++)
            {
                fin>>t[i][j];
                t[j][0]+=t[j][i];
                t[0][i]+=t[j][i];
                total+=t[j][i];
            }
        swap(m,n);
        swap(r,c);
    }
    back(0,0,total);
    fout<<summax;
    return 0;
}