51nod 1051 最大子矩阵和

51nod 1051 最大子矩阵和

可以用前缀和容斥优化到 \(O(n^4)\),但是不够进行如下图操作:

image

将每一列的数值都压缩到一维的数组上,就转换为求最大字段和问题,时间复杂度 \(O(n^3)\)

看看代码就知道了。

#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,m;
int a[505][505];
ll b[505];
int main(){
ios::sync_with_stdio(false);
cin>>m>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
}
}
ll ans=INT_MIN;
for(int l=1;l<=n;l++){
memset(b,0,sizeof b);//起点变了,清零。
for(int r=l;r<=n;r++){
for(int k=1;k<=m;k++){//合并位一维数组
b[k]+=a[r][k];
}
ll mx=INT_MIN;
ll cmx=0;
for(int k=1;k<=m;k++){//最大字段和
cmx=max(b[k],cmx+b[k]);
mx=max(mx,cmx);
}
ans=max(ans,mx);
}
}
if(ans<0){
cout<<0;
}
else{
cout<<ans;
}
return 0;
}
posted @   sad_lin  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
点击右上角即可分享
微信分享提示