Pagini recente » Cod sursa (job #2495730) | Cod sursa (job #1010318) | Rating Andrei Lavric (giovinco) | Cod sursa (job #382374) | Cod sursa (job #1088875)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int N,M,R,C;
int CountLines;
vector <int> Matrix[7500];
vector <int> Matrix2[7500];
int Sign[7500];
int Sums[7500];
int MaxSum;
void Reverse(int line,int col)
{
int i,j;
for(i=1;i<=col;i++)
Matrix2[i].push_back(0);
for(i=1;i<=col;i++)
for(j=1;j<=line;j++)
Matrix2[i].push_back(Matrix[j][i]);
for(i=1;i<=line;i++)
{
Matrix[i].clear();
Matrix[i].push_back(0);
}
for(i=1;i<=col;i++)
for(j=1;j<=line;j++)
Matrix[i].push_back(Matrix2[i][j]);
}
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);
}
}
if(N>M)
{
Reverse(N,M);
swap(N,M);
swap(R,C);
}
}
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;
}