Pagini recente » Cod sursa (job #148248) | Cod sursa (job #1956190) | Cod sursa (job #919526) | Cod sursa (job #1497034) | Cod sursa (job #2415453)
#include <bits/stdc++.h>
using namespace std;
ifstream f ("elimin.in");
ofstream g ("elimin.out");
const int nmax=1e3+3;
int n,m,t1,t2,tt[nmax],v[nmax][nmax],aux[nmax][nmax],pwp,viz[nmax],sol,s[nmax],t[nmax];
vector <int> d;
void bulan()
{
int usu=pwp;
for(int j=0;j<d.size();++j) usu-=s[d[j]];
for(int i=1;i<=n;++i)
{
t[i]=tt[i];
for(int j=0;j<d.size();++j) t[i]-=v[i][d[j]];
}
sort(t+1,t+n+1);
for(int i=1;i<=t1;++i)
{
usu-=t[i];
if(usu<sol) return;
}
sol=max(sol,usu);
}
void solve(int lvl,int act)
{
if(lvl==t2)
{
bulan();
return;
}
int r=t2-lvl;
for(int i=act;i<=m-r+1;++i)
{
viz[i]=1;
d.push_back(i);
solve(lvl+1,i+1);
viz[i]=0;
d.pop_back();
}
}
int main()
{
ios::sync_with_stdio(false);
f>>n>>m>>t1>>t2;
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) f>>v[i][j];
}
if(m>n)
{
swap(t1,t2);
for(int i=1;i<=m;++i)
{
for(int j=1;j<=n;++j) aux[i][j]=v[j][m-i+1];
}
for(int i=1;i<=m;++i)
{
for(int j=1;j<=n;++j) v[i][j]=aux[i][j];
}
swap(n,m);
}
for(int i=1;i<=n;++i)
{
for(int j=1;j<=m;++j) tt[i]+=v[i][j];
}
for(int i=1;i<=m;++i)
{
for(int j=1;j<=n;++j)
{
pwp+=v[j][i];
s[i]+=v[j][i];
}
}
solve(0,1);
g<<sol;
return 0;
}