Pagini recente » Cod sursa (job #334244) | Cod sursa (job #821069) | Cod sursa (job #2814717) | Cod sursa (job #2990420) | Cod sursa (job #2104566)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
int v[8000],s[8000],ans=0,n,m,r,c;
vector <int> mat[8000], matc[8000];
void solve(){
int i,j;
for(i=1;i<=m;i++){
s[i]=0;
for(j=1;j<=n;++j){
if(v[j]==0)
s[i]+=mat[j][i];
}
}
sort(s+1, s+m+1);
int sum = 0;
for(i = c+1; i<=m; ++i)
sum += s[i];
ans = max(ans, sum);
}
void backt(int cnt,int x){
if(x==n+1){
if(cnt==r){
solve();
}
return;
}
if(cnt > r)
return;
v[x] = 1;
backt(cnt+1, x+1);
v[x] = 0;
backt(cnt, x+1);
}
void rotateMat()
{
int i,j;
for(j=1; j<=m; j++)
matc[j].resize(n+1);
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
matc[m+1-j][i] = mat[i][j];
for(j=1; j<=m; j++)
mat[j].resize(n+1);
for(j=m+1; j<=n; j++)
mat[j].clear();
for(i=1; i<=n; i++)
for(j=1; j<=m; j++)
mat[i][j] = matc[i][j];
swap(n,m);
}
int main()
{
int i,j;
ifstream cin("elimin.in");
ofstream cout("elimin.out");
cin >> n >> m >> r >> c;
for(i = 1; i<=n; i++)
{
mat[i].resize(m+1);
for(j = 1; j<=m; j++)
cin >> mat[i][j];
}
if(n > m)
rotateMat();
backt(0,1);
cout << ans << "\n";
return 0;
}