Pagini recente » Cod sursa (job #1827423) | Cod sursa (job #2573477) | Cod sursa (job #2861816) | Cod sursa (job #1630585) | Cod sursa (job #1002435)
#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[7300], a[7300][7300], sc[7300], sl[7300], sumtot, sc2[7300], mx, soll, n, m;
inline void write()
{
//out<<'\n';
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]=sc[i];
for(i=1; i<=r; ++i)
{
for(; j<=m; ++j)
{
//out<<sc2[j]<<'\n';
//soll-=sl[sol[i]];
sc2[j]-=a[sol[i]][j];
//out<<sc2[j]<<'\n';
}
soll-=sl[sol[i]];
}
//out<<soll<<endl;
//out<<endl<<endl;
//s-au sters liniile
if(c)
{
greedy();
}
else
{
//out<<soll;
if(soll>mx)
mx=soll;
}
}
inline void tiparestesol(int lim)
{
for(int i=1; i<=lim; ++i)
out<<sol[i]<<' ';
out<<'\n';
}
inline void BT(int k)//combinari de n luate cate r
{
if(k==r+1)
{
//tiparestesol(r);
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 if(c)
{
soll=sumtot;
greedy();
}
if(!r && !c)
{
mx=sumtot;
write();
}
//write();
in.close();
out.close();
return 0;
}