Cod sursa(job #1088641)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 20 ianuarie 2014 18:09:57
Problema Elimin Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
short N,M,R,C;
short CountLines;
vector <short> Matrix[7500];
short Sign[7500];
int Sums[7500];
int MaxSum;
void Read()
{
    int i,j;
    f>>N>>M>>R>>C;
    for(i=1;i<=N;i++)
    {
        Matrix[i].push_back(0);
        for(j=1;j<=M;j++)
        {
            int value;
            f>>value;
            Matrix[i].push_back(value);
        }
    }

}
void Solution()
{
    int i,j,TotalSum=0;
    Sums[0]=0;
    for(j=1;j<=M;j++)
    {
        int sum=0;
        for(i=1;i<=N;i++)
            sum+=Matrix[i][j]*Sign[i];
        Sums[++Sums[0]]=sum;
    }
    sort(Sums+1,Sums+Sums[0]+1);
    for(i=C+1;i<=Sums[0];i++)
       TotalSum+=Sums[i];
    MaxSum=max(MaxSum,TotalSum);
}
void Back(int level)
{
    int i;
    for(i=0;i<=1;i++)
    {
        Sign[level]=i;
        if(Sign[level]==0)
            CountLines++;
        if(level<N && CountLines<R)
            Back(level+1);
        if(CountLines==R)
            Solution();
        if(Sign[level]==0)
            CountLines--;
    }
}
int main()
{
    Read();
    for(int i=1;i<=N;i++)
        Sign[i]=1;
    Back(1);
    g<<MaxSum<<"\n";
    return 0;
}