Pagini recente » Cod sursa (job #2807095) | Cod sursa (job #3191690) | Cod sursa (job #2910032) | Cod sursa (job #1331449) | Cod sursa (job #1746838)
#include <iostream>
#include <algorithm>
#include <cstdio>
#define NR 7300
using namespace std;
int sumaPeColoana[NR],sumaPeLinii[NR],matriceData[20][NR],vectorCombinari[NR],m,n,r,c,sumaMaxima;
void citireDateIntrare()
{
cin>>m>>n>>r>>c;
if(n<=m)
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>matriceData[i][j];
sumaPeLinii[i]+=matriceData[i][j];
}
}
else
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++){
cin>>matriceData[j][i];
sumaPeLinii[j]+=matriceData[j][i];
}
}
swap(n,m);
swap(r,c);
}
void determinareSuma()
{
int sumaProvizorie=0;
for(int j=1; j<=n; j++)
sumaPeColoana[j]=0;
for(int j=1; j<=n; j++)
{for(int i=1; i<=m-r; i++)
sumaPeColoana[j]+=matriceData[vectorCombinari[i]][j];
}
for(int i=1; i<=m-r; i++)
sumaProvizorie+=sumaPeLinii[vectorCombinari[i]];
sort(sumaPeColoana+1,sumaPeColoana+n+1);
for(int i=1; i<=c; i++)
sumaProvizorie-=sumaPeColoana[i];
if(sumaMaxima<sumaProvizorie)
sumaMaxima=sumaProvizorie;
}
void generareCombinari(int x)
{
if(x==m-r+1)
{
determinareSuma();
return;
}
for(int i=vectorCombinari[x-1]+1; i<=n-(m-r)+x; i++)
{
vectorCombinari[x]=i;
generareCombinari(x+1);
}
}
int main()
{
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
citireDateIntrare();
generareCombinari(1);
cout<<sumaMaxima;
return 0;
}