作者:小辛牛牛123牛牛小辛321 | 来源:互联网 | 2023-10-17 13:52
已知一个长度为n的数组a和一个长度为m的数组b,问当两者相乘组成矩阵时求满足子矩阵中所有数相加小于x的最大面积数学题,这个问题可以转化为从A和B中找到一个子阵列,使得这些子阵列的元
已知一个长度为n的数组a和一个长度为m的数组b,问当两者相乘组成矩阵时求满足子矩阵中所有数相加小于x的最大面积
数学题,这个问题可以转化为从A和B中找到一个子阵列,使得这些子阵列的元素总和的乘积小于或等于x,并且它们的大小的乘积是最大的
#include
#define ll long long
using namespace std;
const int maxn=2000+10;
ll a[maxn],b[maxn],minsa[maxn],minsb[maxn];
ll n,m,x;
int main()
{
ios::sync_with_stdio(false);cin.tie(0);
cin>>n>>m;
for(int i=0;i){
cin>>a[i];
}
for(int i=0;i){
cin>>b[i];
}
cin>>x;
for(int i=0;i)
minsa[i]=minsb[i]=x+1;
for(int i=0;i)
{
ll sum=0;
for(int j=i;j)
{
sum+=a[j];
minsa[j-i+1]=min(minsa[j-i+1],sum);
}
}
for(int i=0;i)
{
ll sum=0;
for(int j=i;j)
{
sum+=b[j];
minsb[j-i+1]=min(minsb[j-i+1],sum);
}
}
int ans=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++){
if(minsa[i]*minsb[j]<=x) ans=max(ans,i*j);
}
}
coutreturn 0;
}
Codeforces Round #513 C - Maximum Subrectangle (数学+思维)