Pagini recente » Cod sursa (job #771576) | Cod sursa (job #713402) | Monitorul de evaluare | Cod sursa (job #1919372) | Cod sursa (job #2236390)
#include <fstream>
#include <algorithm>
#include <vector>
#define DIM 7300
using namespace std;
ifstream fin ("elimin.in");
ofstream fout ("elimin.out");
int n,m,i,j,s,mini,nr,l,c,sl[DIM],sc[DIM],x[DIM];
vector <int> L[DIM],a[DIM];
void back (int pas){
if (pas > c){
for (int i=1;i<=n;i++){
sl[i] = 0;
for (int j=1;j<=m;j++)
sl[i] += a[i][j];
}
for (int j=1;j<=c;j++)
for (int i=1;i<=n;i++)
sl[i] -= a[i][x[j]];
sort (sl+1,sl+n+1);
int sum = 0;
for (int i=1;i<=l;i++)
sum += sl[i];
for (int i=1;i<=c;i++)
sum += sc[x[i]];
mini = min (mini,sum);
return;
}
for (int i=1;i<=m;i++){
x[pas] = i;
if (x[pas] > x[pas-1])
back (pas+1);
}
}
int main (){
fin>>n>>m>>l>>c;
for (i=1;i<=n;i++){
L[i].push_back (0);
for (j=1;j<=m;j++){
fin>>nr;
L[i].push_back (nr);
s += nr;
}
}
if (n < m){
/// interschimbam matricea
for (i=1;i<=m;i++)
for (j=0;j<=n;j++)
a[i].push_back (0);
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
a[m-j+1][i] = L[i][j];
swap (n,m);
swap (l,c);
}
else{
for (i=1;i<=n;i++){
a[i].push_back (0);
for (j=1;j<=m;j++)
a[i].push_back (L[i][j]);
}
}
/// facem sume partiale pe linii si pe coloane
for (j=1;j<=m;j++)
for (i=1;i<=n;i++)
sc[j] += a[i][j];
mini = 2000000000;
back (1);
fout<<s - mini;
return 0;
}