题目链接 Problem - 1081

题意

Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 1 or greater located within the whole array. The sum of a rectangle is the sum of all the elements in that rectangle. In this problem the sub-rectangle with the largest sum is referred to as the maximal sub-rectangle.

As an example, the maximal sub-rectangle of the array:

0 -2 -7 0
9 2 -6 2
-4 1 -4 1
-1 8 0 -2

is in the lower left corner:

9 2
-4 1
-1 8

and has a sum of 15.
求最大的子矩阵和。

题解

这题注意要多组输入输出。

方法1

我自己想的\(O(n^3)\)的算法比较烦:(为什么每次我想的都那么不正常)
前缀和s[i][j],表示(0,0)-(i,j)子矩阵的和。
子矩阵(i,j)-(k,l)的和就是s[k][l]-s[i][l]-s[k][j]+s[i][j]
枚举右下角(K,L),和左上角的行号i,那么s[k][l]-s[i][l]是固定的,要让s[k][j]-s[i][j]最小。
于是g[k][i]保存和最小的s[k][j]-s[i][j]且小于l的j。

方法2

看了别人的,突然觉得自己的真麻烦。
s[i][j]表示第i行的前j列的和。
枚举左右边界的列编号i,j,sum保存第i列到第j列从第k行往上连续的最大和。这个过程只需枚举k从1到n,只要之前的sum是正的就继续累加,否则sum=0再加:sum+=s[k][j]-s[k][i-1]。用sum更新ans即可。

代码

方法1

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define N 105
using namespace std;
int n,a[N][N],g[N][N],s[N][N],ans;
int main() {while(~scanf("%d",&n)){ans=-127;memset(g,0,sizeof g);memset(s,0,sizeof s);for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);for(int k=1;k<=n;k++)for(int l=1;l<=n;l++){s[k][l]=s[k-1][l]+s[k][l-1]-s[k-1][l-1]+a[k][l];for(int i=0;i<k;i++){int &j=g[k][i];ans=max(ans,s[k][l]-s[i][l]-s[k][j]+s[i][j]);if(s[k][j]-s[i][j]>s[k][l]-s[i][l])j=l;}}printf("%d\n",ans);}return 0;
}

方法2

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#define N 105
using namespace std;
int n,s[N][N],ans,sum;
int main() {while(~scanf("%d",&n)){memset(s,0,sizeof s);ans=-127;sum=0;for(int i=1,a;i<=n;i++)for(int j=1;j<=n;j++){scanf("%d",&a);s[i][j]=s[i][j-1]+a;}for(int i=1;i<=n;i++)for(int j=i;j<=n;j++)for(int k=1;k<=n;k++){if(k==1||sum<0)sum=0;sum+=s[k][j]-s[k][i-1];ans=max(ans,sum);}printf("%d\n",ans);}return 0;
}

【 HDU1081 】 To The Max (最大子矩阵和)相关推荐

  1. POJ 1050 To the Max (最大子矩阵和)

    题目链接 题意:给定N*N的矩阵,求该矩阵中和最大的子矩阵的和. 题解:把二维转化成一维,算下就好了. #include <cstdio> #include <cstring> ...

  2. 动态规划详解 转自瞿老师的博客

    目录     一.动态规划初探       1.递推       2.记忆化搜索       3.状态和状态转移       4.最优化原理和最优子结构       5.决策和无后效性   二.动态规 ...

  3. HDU1081:To The Max(最大子矩阵,线性DP)

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=1081 自己真够垃圾的,明明做过一维的这种题,但遇到二维的这种题目,竟然不会了,我也是服了(ps:猪啊). ...

  4. 动态规划——最大子矩阵(hdu1081)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1087 题目描述: 在一个给定的大矩阵中找一个小型的矩阵,使这个矩阵中的元素和最大 解题思路: 这道题 ...

  5. Bailian2766 最大子矩阵【最大子段和+DP】

    最大子矩阵 总时间限制: 1000ms 内存限制: 65536kB 描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 ...

  6. 51Nod-1051 最大子矩阵和【最大子段和+DP】

    1051 最大子矩阵和 基准时间限制:2秒 空间限制:131072KB 分值:40难度:4级算法题 一个M*N的矩阵,找到此矩阵的一个子矩阵,并且这个子矩阵的元素的和是最大的,输出这个最大的值. 例如 ...

  7. 求一个矩阵的最大子矩阵

    #include <iostream> #include <string> #include <assert.h> #include <malloc.h> ...

  8. 最大子矩阵(降维处理)

    题目描述 已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大小至少是1 * 1)子矩阵. 比如,如下4 * 4的矩阵 0 -2 -7 0 9 2 -6 2 -4 1 - ...

  9. 带限制条件的最大子矩阵 - 牛客

    链接:https://www.nowcoder.com/acm/contest/131/B 来源:牛客网 题目描述 矩阵 M 包含 R 行 C 列,第 i 行第 j 列的值为 Mi,j. 请寻找一个子 ...

  10. 软件工程——求二维数组所有子矩阵的和的最大值

    题目:返回一个整数数组中最大子数组的和. 要求: 输入一个整形数组,数组里有正数也有负数. 数组中连续的一个或多个整数组成一个子数组,每个子数组都有一个和. 求所有子数组的和的最大值.要求时间复杂度为 ...

最新文章

  1. 谷歌BERT预训练源码解析(一):训练数据生成
  2. android 音乐播放器中播放模式的设计
  3. 线上使用zabbix报警脚本(含图片)
  4. [ZJOI2011]礼物
  5. Python实现将图片转字符画
  6. hdu 5785 Interesting(manacher+前缀和)
  7. 修改php上传限制 (phpmyadmin 限制)
  8. Java中多线程访问冲突的解决方式
  9. pmo与敏捷团队可以共存吗_匿名与问责制可以共存吗?
  10. 企业发文的红头文件_【红头文件写作格式】 公司红头文件格式范本
  11. BCDboot 命令行选项
  12. 实现省市区镇四级联动选择器(地址选择)
  13. centos7系统详细安装步骤
  14. 系统辨识与自适应控制matlab程序_杂志精选 | 自适应声反馈抑制技术及其应用
  15. Deeper引领WEB3.0世界:去中心化、 安全性和超高速率的统一
  16. excel日期怎么间隔填充_系列或相同日期的自动填充Excel日期
  17. 在线直播源码,VUE 获奖名单滚动显示的两种方式
  18. pmos低电平驱动_MOS管驱动电路总结
  19. 用 gcc生成静态库和动态库以及静态库和动态库的使用
  20. 项目经理应怎么利用人工智能?

热门文章

  1. 例3.4 二叉树遍历 - 九度教程第32题(二叉树)
  2. ResNet网络理解
  3. python发明小故事简写_科学发明小故事10字以上
  4. 服务器 16路直连 英特尔,Intel 10nm服务器怪咖:八通道+16条内存
  5. C语言读取文件输入输出
  6. 阿里巴巴集团CTO王坚:云计算让理想平等
  7. 执行mvn 报错 source-1.5 中不支持 diamond运算符
  8. WebGL 3D on iOS8 正式版
  9. _cdecl与_stdcall的区别
  10. SOA渐行渐近-怎样给IT系统一个新视角?