Cod sursa(job #2310214)

Utilizator lucianistratiIstrati Lucian lucianistrati Data 30 decembrie 2018 20:10:07
Problema Elimin Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
int maxim(int a,int b)
{
    if(a>b)
        return a;
    return b;
}
int N,M,a[5000][20],R,C,rezultat,aux[5052],x[30],i,j;
int verificare_dimensiuni()
{
    if(M>N)
    {
        swap(M,N);
        swap(C,R);
        return 1;
    }
    return 0;
}
void Citire()
{
    fin>>N>>M>>R>>C;
    if(verificare_dimensiuni()==1)
    {
        for(i=1;i<=N;i++)
            for(j=1;j<=M;j++)
            {
                fin>>a[j][i];
            }
    }
    else
    {
        for(i=1;i<=N;i++)
            for(j=1;j<=M;j++)
                fin>>a[i][j];
    }
    for(i=1;i<=M;i++)
        for(j=1;j<=N;j++)
    {
        a[j][0]+=a[j][i];
    }
    fin.close();
    fout.close();
}
 void Solve()
{
    int ok=0;
    for(i=1;i<=N;++i)
    {
        aux[i]=a[i][0];
    }
    sort(aux+1,aux+N+1);
    for(i=R+1;i<=N;i++)
    {
        ok+=aux[i];
    }
    rezultat=maxim(ok,rezultat);
}
void Backtracking(int k, int t)
{
    if(k>C)
    {
        Solve();
    }
    else
    {
        for(i=t+1;i<=M;i++)
        {
            x[k]=i;
            for(j=1;j<=N;j++)
            {
                a[j][0]-=a[j][i];
            }
            Backtracking(k+1,i);
            for(j=1;j<=N;j++)
            {
                a[j][0]+=a[j][i];
            }
        }
    }
}
int main()
{
    Citire();
    Backtracking(1,0);
    fout<<rezultat;
    fin.close();
    fout.close();
    return 0;
}