Pagini recente » Cod sursa (job #948464) | Profil StarGold2 | Cod sursa (job #202477) | Cod sursa (job #1308063) | Cod sursa (job #21356)
Cod sursa(job #21356)
#include <cstdio>
#include <algorithm>
using namespace std;
#define dbg if(v1)
bool v1 = false;
const int N = 1000;
int n,m,r,c, sg;
int a[N][N];
int sc[N], sl[N], x[N];
int max_my = -2000000000;
struct s_linie {
int s, p;
};
s_linie y[N];
inline bool comp_s_linie ( const s_linie &a, const s_linie &b ) { return (a.s > b.s); }
void linii() {
int s = sg;
for (int i = 0; i<n; ++i) {
y[i].p = i;
y[i].s = -sl[i];
for (int j = 0; j<c; ++j) {
y[i].s += a[i][x[j]];
}
dbg printf("Linia %d scade %d\n",i,y[i].s);
}
sort(y,y+n,comp_s_linie);
for (int i = 0; i<r; ++i) {
s += y[i].s;
dbg printf("Aleg linia %d\n",y[i].p);
}
dbg printf("iese suma %d\n",s);
if (s > max_my) {
max_my = s;
dbg printf("care este si maxima\n");
}
}
void back ( int lvl ) {
for (int i = (lvl == 0) ? 0 : x[lvl-1]+1; i<m; ++i) {
x[lvl] = i;
sg -= sc[x[lvl]];
if (lvl == c-1) {
dbg printf("O varianta pe coloane: ");
dbg for (int i = 0; i<=lvl; ++i) {
printf("%d ",x[i]);
}
dbg printf(" ( suma ramane: %d )\n",sg);
linii();
} else {
back(lvl+1);
}
sg += sc[x[lvl]];
}
}
int main() {
freopen("elimin.in","r",stdin);
freopen("elimin.out","w",stdout);
scanf("%d %d %d %d",&n,&m,&r,&c);
if (n < m) {
//citesc inversat
for (int i = 0; i < n; ++i) {
for (int j = 0; j<m; ++j) {
scanf("%d",&a[j][i]);
sg += a[j][i];
sc[i] += a[j][i];
sl[j] += a[j][i];
}
}
n ^= m; m ^= n; n ^= m;
r ^= c; c ^= r; r ^= c;
} else {
//citesc normal
for (int i = 0; i < n; ++i) {
for (int j = 0; j<m; ++j) {
scanf("%d",&a[i][j]);
sg += a[i][j];
sc[j] += a[i][j];
sl[i] += a[i][j];
}
}
}
dbg {
printf("%d linii si %d coloane\n",n,m);
for (int i = 0; i<n; ++i) {
for (int j = 0; j<m; ++j) {
printf("%d ",a[i][j]);
}
printf("\n");
}
for (int i = 0; i<n; ++i) {
printf("suma pe linia %d este %d\n",i,sl[i]);
}
for (int j = 0; j<m; ++j) {
printf("suma pe coloana %d este %d\n",j,sc[j]);
}
}
dbg printf("Intru in back\n");
back(0);
printf("%d\n",max_my);
return 0;
}