Pagini recente » Cod sursa (job #528739) | Cod sursa (job #982143) | Cod sursa (job #6282) | Cod sursa (job #2210368) | Cod sursa (job #1002428)
#include <fstream>
#include <algorithm>
#define IN "elimin.in"
#define OUT "elimin.out"
using namespace std;
ifstream in(IN);
ofstream out(OUT);
int r, c, sol[7295], a[7295][7295], sc[7295], sl[7295], sumtot, sc2[7295], mx, soll, n, m;
inline void write()
{
out<<mx<<'\n';
}
inline void read()
{
in>>n>>m>>r>>c;
int i, j;
for(i=1; i<=n; ++i)
for(j=1; j<=m; ++j)
{
in>>a[i][j];
sl[i]+=a[i][j];
sc[j]+=a[i][j];
//sc2[j]+=a[i][j];
sumtot+=a[i][j];
}
}
inline void greedy()
{
sort(sc+1, sc+n+1);
int i=1;
for(; i<=c; ++i)
soll-=sc2[i];//se scade coloana i
if(soll>mx)
mx=soll;
}
inline void solution()
{
int i=1, j=1;
soll=sumtot;
for(; i<=m; ++i)
sc2[i]=sc2[i];
for(i=1; i<=r; ++i)
for(; j<=m; ++j)
{
soll-=sl[sol[i]];
sc2[j]-=a[sol[i]][j];
}
//s-au sters liniile
if(c)
{
greedy();
}
else
if(soll>mx)
mx=soll;
}
inline void BT(int k)//combinari de n luate cate r
{
if(k==r+1)
solution();
else
{
sol[k]=sol[k-1];
while(sol[k]<n-r+k)
{
++sol[k];
BT(k+1);
}
}
}
int main()
{
read();
if(r)
BT(1);
else
{
soll=sumtot;
greedy();
}
write();
in.close();
out.close();
return 0;
}