一、题目

题目描述:现给出一个N*N矩阵,要求求出拥有最大和的子矩阵的和。例子如下图所示:

它的最大子矩阵的和为15;

二、解题思路

此题的解法与动态规划经典题目——最大连续子序列之和题目思想一样,只不过本题是二维空间上的拓展。N*N矩阵用二维数组a[N][N]表示。我们解决新问题的方法是借鉴我们以前解决过的类似问题的方法和思路,当然本题也不例外,通过思考可以发现,这道题目与动态规划经典题目——最大连续子序列之和非常相似,只不过动态规划经典题目——最大连续子序列之和它是一维的问题,而本题目是二维问题,我们是否能把二维问题转化为一维问题吗?通过认真的考虑是可以的,我们可以把每列的元素进行合并为一个元素(可以定义二维数组sum[][],其中sum[i]表示前i行每列数字相加的和,所以sum[j][] - sum[i][]为一维向量),这样运用动态规划经典题目——最大连续子序列之和的思想了。

①定义状态

根据上面的分析,我们定义二维数组dp[i][j]表示第i行到第j行中的最大子矩阵和。所以我们要求的最大子矩阵和为max(dp[i][j])其中0≤i≤j≤N;

②定义状态转移方程

大家知道动态规划满足无后向性,即:每个阶段的决策仅受之前决策的影响,但是不影响之后各阶段的决策。所以我们可以从后往前推出状态转移方程,具体定义可参考动态规划经典题目——最大连续子序列之和中的状态转移方程。

三、代码编写

#include <stdio.h>
#include <stdlib.h>#define N 4
#define max(a,b) ((a > b)?a:b)int main()
{//定义矩阵int a[N][N] = { {0,-2,-7,0},{9,2,-6,2},{-4,1,-4,1},{-1,8,0,-2}};//定义二维数组sum[][],其中sum[i]表示前i行每列数字相加的和,//所以sum[j][] - sum[i][]为一维向量int sum[N+1][N] = {0};int temp = 0 ;//保存最大子矩阵和int maxResult = 0;//给sum数组赋值int i,j,k;for(i=1 ; i < N+1 ; i++){for(j=0 ; j < N ; j++){sum[i][j] = sum[i-1][j] + a[i-1][j];}}//核心算法for(i=0 ; i < N ; i++){for(j=i+1 ; j < N+1 ; j++){temp = 0 ;for(k=0 ; k < N ; k++){temp += (sum[j][k] - sum[i][k]);if(temp > maxResult){maxResult = temp;}if(temp < 0){temp = 0;}}}}printf("最大子矩阵和为:%d",maxResult);return 0;
}

四、运行结果

动态规划经典题目——最大子矩阵和相关推荐

  1. 动态规划经典题目_动态规划经典题目:鸡蛋掉落(附视频讲解)

    题目: 思路: 先放上视频讲解 动态规划经典题目:鸡蛋掉落https://www.zhihu.com/video/1225199247848513536 纠正:视频里的状态转移方程漏写了一个+1,意思 ...

  2. 动态规划经典题目-最小权三角剖分

    文章目录 一.题目描述 二.解题思路 1. 定义状态 2. 定义状态转移方程 3. 初始化 4. 计算方式 三.代码实现 四.执行结果 五.思考 一.题目描述 设A是顶点为0,1,-,n-1的n凸多边 ...

  3. 动态规划经典题目整理

    动态规划经典题目整理 背包问题 最长公共子串问题 连续数组最大和问题 持续增加中.... 背包问题 复杂度 O(nW)O(nW)O(nW) nnn为物品种类,WWW是背包的重量 目的:使得背包中的物品 ...

  4. 动态规划经典题目-数据压缩之图像压缩

    文章目录 一.题目描述 二.解题思路 1. 定义状态 2. 定义状态转移方程 3. 初始化 4. 计算方式 三.代码实现 四.执行结果 五.思考 一.题目描述 ​ 计算机中的图像由一系列像点构成,每个 ...

  5. poj动态规划经典题目

    列表一:经典题目题号: 容易: 1018, 1050, 1088, 1125, 1143, 1157, 1163, 1178, 1179, 1189, 1191,1208, 1276, 1322, 1 ...

  6. 动态规划经典题目汇总

    http://www.cppblog.com/doer-xee/archive/2009/12/05/102629.html 转载之前先Orz一下: [s:19] Robberies http://a ...

  7. 动态规划经典题目总结

    微信公众号 在算法中,动态规划题目算是比较经典的一类题目.在找工作中,不管是笔试,还是面试,我们经常会遇到用动态规划来解决问题的情况,有时候面试官还需要我们现场手写出动态规划解法的代码.因此,在求职中 ...

  8. 动态规划经典题目——数塔问题

    一.题目 数塔问题 :要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少? 二.解题思路 动态规划解题思路可详见另一篇文章.数塔中元素用二维数组a[][]表示 ①定义状态 ...

  9. 动态规划经典题目——0-1背包

    一.题目 有N件物品和一个容量为V的背包.第i件物品的重量是w[i],价值是v[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和最大. 二.解题思路 动态规划解题思路可详见 ...

最新文章

  1. (原創) 如何將編譯結果,統一放在一個目錄下? (SOC) (Quartus II)
  2. 【python】命令行解析工具getopt用法
  3. CephFS管理命令
  4. [云炬创业学笔记]第二章决定成为创业者测试12
  5. c语言嵌套结构体生日,第09天C语言(17):结构体嵌套
  6. Docker下使用gdb
  7. Pyshark获取data-text-lines字段的值
  8. Ubuntu系统下go语言环境的搭建
  9. 【PS平面设计教程】6种最常用抠图技巧,十万人都抢着收藏
  10. uc android 4.2,uc网盘下载10.4.2 安卓版-uc网盘手机版西西软件下载
  11. 手把手教你理解SURF算法的全部过程
  12. 线性代数应用于计算机科学例子,Sagemath在线性代数教学中的应用
  13. 深度学习与计算机视觉教程(17) | 深度强化学习 (马尔可夫决策过程,Q-Learning,DQN)(CV通关指南·完结)
  14. 2021年安徽省职业院校技能大赛网络搭建与应用竞赛
  15. java代码中实现excel表下载
  16. KubeSphere 多行日志采集方案深度探索
  17. RTC使用野火例程,LSE复位可用,HSE和LSI不可用问题。
  18. Mythtype对公式按章节自动编号和文中引用
  19. 35岁程序员:从焦虑到适应
  20. Mac突然没有声音了,音频和视频都不能播放了。

热门文章

  1. Win10 新功能 改变显示器色彩
  2. html5 canvas 显示文字居中,html5 canvas 文字居中对齐
  3. 坦克大战(版本1.0-版本1.6)
  4. Java模拟发送Http请求详细示例
  5. Tensorflow 学习之猫狗分类案例
  6. SecurityContextPersistenceFilter详解
  7. 【金融】券商结算模式
  8. jar中没有主清单属性【解决办法】
  9. Smoke Test和BVT Test的区别
  10. 【golang时间戳转换时间格式字符串】