博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
POJ1050 To the Max 最大子矩阵
阅读量:4946 次
发布时间:2019-06-11

本文共 996 字,大约阅读时间需要 3 分钟。

给定一个矩阵,求和最大的子矩阵。

将每一列的值进行累加,枚举起始行和结束行,然后就可以线性优化了 复杂度O(n^3)

#include
#include
#include
#include
#include
#include
using namespace std;const int N=301,M=301;const int INF=0x3fffffff;int sum[N][M],arr[M];int find_max(int a[N][M],int n,int m){ if(n==0||m==0)return 0; int i,j,up,down, ret=-INF; memset(sum,0,sizeof(sum)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) sum[i][j]=sum[i-1][j]+a[i][j]; arr[0]=0; for(up=1;up<=n;up++) for(down=up;down<=n;down++) { for(i=1;i<=m;i++) arr[i]=arr[i-1]+(sum[down][i]-sum[up-1][i]); int mini=0; for(i=1;i<=m;i++) { ret=max(ret,arr[i]-mini); mini=min(mini,arr[i]); } } return max(0,ret); }int main(){freopen("t.txt","r",stdin); int n; while(scanf("%d",&n)!=EOF) { int num[N][M]; for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&num[i][j]); printf("%d\n",find_max(num,n,n)); } return 0;}

  

转载于:https://www.cnblogs.com/heisenberg-/p/6895330.html

你可能感兴趣的文章
Linux GCC常用命令
查看>>
osx mavericks 删除诡异的共享账号
查看>>
N的阶乘中末尾有几个0
查看>>
很经典的赋值算法之一:动态为数组有序赋值
查看>>
[VJ][DP]
查看>>
pandas数据结构之DataFrame操作
查看>>
转:android service总结
查看>>
【软件工程心得】与真实客户交流
查看>>
poj2718 Smallest Difference(dfs+特判,还可以贪心更快)
查看>>
oracle undo 复杂度--oracle核心技术读书笔记四
查看>>
【JAVA】两点经纬度直线距离的计算
查看>>
Android逆向之旅---破解&quot;穿靴子的猫&quot;游戏的收费功能
查看>>
nmapport状态解析
查看>>
sklearn:Python语言开发的通用机器学习库
查看>>
Python多线程之线程创建和终止
查看>>
【转载】使用元类
查看>>
1.3ionic入门——tabs样式添加测滑栏
查看>>
MySQL—函数大全
查看>>
页面中的meta作用
查看>>
实现如下类之间的继承关系,并编写Music类来测试这些类。
查看>>