Pagini recente » Cod sursa (job #517279) | Cod sursa (job #2636763) | Cod sursa (job #1463245) | Cod sursa (job #2798127) | Cod sursa (job #1088641)
#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;
}