Pagini recente » Cod sursa (job #1360414) | Cod sursa (job #1621394) | Cod sursa (job #1195879) | Cod sursa (job #2963943) | Cod sursa (job #2212414)
#include <bits/stdc++.h>
#define NMAX 1001
typedef long long ll;
using namespace std;
ifstream fin("elimin.in");
ofstream fout("elimin.out");
long long A[NMAX][NMAX];
bool cmp (int a,int b){
return a<b;
}
ll R[NMAX],I[NMAX],C[NMAX],m,n,r,c,s=0;
void solve(ll k){
if (k<r){
if(k){
for(ll i = I[k-1]+1;i<m;i++){
I[k]=i;
solve(k+1);
}
}else{
for(ll i = 0;i<m;i++){
I[k]=i;
solve(k+1);
}
}
}else{
int sc=0;
for(ll i=0;i<r;i++){
sc+=R[I[i]];
}
for(ll i=0;i<n;i++)
C[i]=0;
for(ll i = 0;i<r;i++)
for(ll j = 0;j<n;j++){
C[j]+=A[I[i]][j];
}
sort(C,C+n,cmp);
for(ll i=0;i<c;i++)
sc-=C[i];
if(sc>s) s=sc;
}
}
int main(){
fin>>m>>n>>r>>c;
if(m<=n){
for (ll i = 0;i<m;i++){
for(ll j = 0;j<n;j++){
fin>>A[i][j];
R[i]+=A[i][j];
}
}
}else{
for (ll i = 0;i<m;i++){
for(ll j = 0;j<n;j++){
fin>>A[j][i];
R[j]+=A[j][i];
}
}
swap(m,n);swap(r,c);
}
r=m-r;
solve(0);
fout<<s;
return 0;
}