51nod 1051 最大子矩阵和
可以用前缀和容斥优化到 \(O(n^4)\),但是不够进行如下图操作:
将每一列的数值都压缩到一维的数组上,就转换为求最大字段和问题,时间复杂度 \(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; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」