Cod sursa(job #961040)

Utilizator primulDarie Sergiu primul Data 11 iunie 2013 16:30:13
Problema Elimin Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
 
using namespace std;
 
ifstream fin("elimin.in");
ofstream fout("elimin.out");
 
short int n, m, r, c, a[700][700], x[700];
long maxim;
vector <long> sol;
bool car[700];
 
void Calculare()
{
    long sum = 0;
    for(int j=1; j<=m; j++)
    {
        long s = 0;
        for(int i=1; i<=n; i++)
        if(!car[i]) s += a[i][j];
 
        sol.push_back(s);
        sum += s;
    }
 
    nth_element(sol.begin(), sol.begin()+c, sol.end());
    for(int i=0; i<c; i++)
    sum -= sol[i];
    sol.clear();
 
    if(maxim < sum) maxim = sum;
 
}
 
void Back(int k)
{
    if(k == r+1) Calculare();
    else
        for(int j=x[k-1]+1; j<=n; j++)
        {
            car[j] = 1;
            x[k] = j;
            Back(k+1);
            car[j] = 0;
        }
}
 
int main()
{
    fin>>n>>m>>r>>c;
 
    if(n <= m)
    for(int i=1; i<=n; i++)
        for(int j=1; j<=m; j++)
            fin>>a[i][j];
    else{
        for(int i=1;i<=n;++i)
            for(int j=1;j<=m;++j)
               fin>>a[j][i];
        swap(m,n);
        swap(r,c);
    }
 
    Back(1);
 
    fout<<maxim;
 
    return 0;
}