Pagini recente » Cod sursa (job #355321) | Cod sursa (job #138302) | Cod sursa (job #2030068) | Cod sursa (job #2584471) | Cod sursa (job #1073268)
#include <fstream>
#include <algorithm>
using namespace std;
const int MAX_N = 7300, MAX_C = 20;
int a[MAX_N][MAX_C], st[MAX_C], sum[MAX_C];
bool viz[MAX_C];
inline int max( int x, int y ){
if( x > y ) return x;
return y;
}
int main(){
int M, N, R, C;
ifstream cin( "elimin.in" );
cin >> M >> N >> R >> C;
if( M < N ){
for( int i = 1; i <= M; ++i )
for( int j = 1; j <= N; ++j ){
cin >> a[j][i];
sum[j] += a[j][i];
}
M = M + N - ( N = M );
R = R + C - ( C = R );
}
else
for( int i = 1; i <= M; ++i )
for( int j = 1; j <= N; ++j ){
cin >> a[i][j];
sum[i] += a[i][j];
}
cin.close();
int k = 1, ans = 0, curr = 0;
st[1] = -1;
while( k > 0 ){
bool as = false;
if( st[k] == - 1 ){
st[k] = 0;
as = true;
}
else if( st[k] == 0 ){
if( curr < C ){
st[k] = 1;
as = true;
++curr;
}
}
if( as ){
if( k < N ) st[++k] = -1;
else if( curr == C ){
int aux[MAX_C];
for( int j = 1; j <= M; ++j ){
aux[j] = sum[j];
for( int i = 1; i <= k; ++i )
aux[j] -= st[i] * a[j][i];
}
sort( aux + 1, aux + M + 1 );
int x = 0;
for( int i = M; i > R; --i )
x += aux[i];
ans = max( ans, x );
}
}
else {
if( st[k] ) --curr;
--k;
}
}
ofstream cout( "elimin.out" );
cout << ans;
cout.close();
return 0;
}