4395. 最大子矩阵(acwing)

根据题意很容易想到二分

但是问题来了 二分面积但是长宽还是需要O(n)来确定 完全承受不了

观察这个题目相较于一般的最大子矩阵问题 在于两个数列

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define ll long long
const int maxn=2e3+5;
ll a[maxn],b[maxn],lena[maxn],lenb[maxn];
ll x;
int n,m,ans; 
int main(){
	cin>>n>>m;
	for(int i=1;i<=n;i++)cin>>a[i],a[i]+=a[i-1];
	for(int i=1;i<=m;i++)cin>>b[i],b[i]+=b[i-1];
	for(int i=1;i<=max(n,m);i++)lena[i]=lenb[i]=2e9+9;
	cin>>x;
	for(int len=1;len<=n;len++)
	for(int l=1;l+len-1<=n;l++)
	lena[len]=min(lena[len],a[l+len-1]-a[l-1]);
	for(int len=1;len<=m;len++)
	for(int l=1;l+len-1<=m;l++)
	lenb[len]=min(lenb[len],b[l+len-1]-b[l-1]);
    for(int i=1;i<=n;i++)
    for(int j=1;j<=m;j++)
    if(lena[i]*lenb[j]<=x)ans=max(ans,i*j);
	cout<<ans<<endl;
	return 0;
}
posted @   wzx_believer  阅读(93)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示