Pagini recente » Cod sursa (job #1227248) | Cod sursa (job #2965759) | Cod sursa (job #1411759) | Cod sursa (job #2554852) | Cod sursa (job #2314756)
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("elimin.in");
ofstream g("elimin.out");
int c[7500], r[7500];
int a[7500][20], sum;
int n, m, R, C, rs[7500], smax;
void citire()
{
f >> n >> m >> R >> C;
if(m <= n){
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++) {
f >> a[i][j];
sum += a[i][j];
}
}
else {
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++) {
f >> a[j][i];
sum += a[j][i];
}
swap(n, m);
swap(R, C);
}
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= m; j ++)
c[i] += a[i][j];
}
void afisare()
{
for(int i=1;i<=m;i++){
for(int j=1;j<=n;j++)
g<<a[i][j]<<' ';
g<<'\n';
}
}
void back(int l, int u){
int i, j;
if (l == C+1) {
sum = 0;
for(i = 1; i <= n; i ++) {
r[i] = c[i];
for(j = 1; j < l; j ++) {
r[i] -= a[i][rs[j]];
}
}
sort(r + 1, r + 1 + n);
for(i = R + 1; i <= n; i ++)
sum += r[i];
smax = max(smax, sum);
} else
for(i = u + 1; i <= m; i++) {
rs[l] = i;
back(l + 1, i);
}
}
int main()
{
citire();
back(1, 0);
g << smax;
return 0;
}