题目链接
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 510;
//#define int long long
int n,m,A,B;
int s[N][N],a[N][N];
bool check(int x)
{
int cnta=0,cntb=0,fa=1,fb=1,sum=0;
for(int i=1;i<=n;i++)
{
fb=1;cntb=0;
for(int j=1;j<=m;j++)
{
sum=s[i][j]-s[fa-1][j]-s[i][fb-1]+s[fa-1][fb-1];
if(sum>=x)
{
cntb++;
fb=j+1;
}
}
if(cntb>=B)
{
cnta++;
fa=i+1;
}
}
if(cnta>=A)return true;
return false;
}
signed main()
{
cin>>n>>m>>A>>B;
int l=0,r=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
cin>>a[i][j];r+=a[i][j];
s[i][j]=s[i-1][j]+s[i][j-1]-s[i-1][j-1]+a[i][j];
}
}
while(l<r)
{
int mid=l+r+1>>1;
if(check(mid))l=mid;
else r=mid-1;
}
cout<<l<<endl;
}