题目:

给定一个 n*n 的矩阵 A,矩阵中的元素只取 0 或者 1。设计一个动态规划算法,求解得到 A 中元素全是 1 的子方阵使其阶数达到最大值。

这个题我没想到方法,但是百度文库查到了学长的做法,拿到这里分享一下,希望学长不要追究啊~~~

分析:其实求解的时候当成m*n的矩阵做就行了。

设n阶矩阵表示为A[1...n][1....n],B[i][j]表示前i行前j列所包含的1的个数。

最优子结构:C[i][j]表示前i行和前j列全为1的最大子方阵,那么显然C[i][j]等于max{C[i][j-1],C[i-1][j],包含A[i][j]的最大的全1子方阵的大小}.这里只要解决了最后一项,这个问题就解决了。这里需要用到一个公式:

因此,先求得C【i】【j-1】和C【i-1】【j】的最大值max,然后从B【i-max】【j-max】往回找就行了。

伪代码:

利用自下向上的动态规划算法就可以了,其中B和C分别用数组记录。

先遍历第一行,再遍历第二行,然后....直到第n行,按照这个遍历方式就行。具体代码不写了....懒..

动态规划------最大子方阵问题相关推荐

  1. 【To Do】程序员面试金典——18.11最大子方阵

    程序员面试金典--18.11最大子方阵 Solution1:我的答案.最笨的方法,时间复杂度是O(n3)O(n3)O(n^3) class SubMatrix { public:int maxSubM ...

  2. java最大子方阵_Java实验(5) 最大子方阵

    给定一个由0,1组成的n*n方阵(n在运行时提醒用户输入),判断其中由全1组成的最大子方阵的左上角位置和阶数.例如用户输入n为5,随机产生的方阵如下: 程序的输出为:最大子方阵位于(2,2),阶数3. ...

  3. 动态规划——最大子数组和(Leetcode 53)

    题目选自Leetcode 53. 最大子数组和 题目描述: 解题思路: 解题代码: int maxSubArray(int* nums, int numsSize){int pre = 0, maxA ...

  4. LeetCode动态规划 最大子序和

    给定一个整数数组 nums ,找到一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和. ps: 清华大学912曾经考过. 状态转移方程 dp[i] = max(nums[i], dp[ ...

  5. Leetcode之最大黑方阵

    题目: 给定一个方阵,其中每个单元(像素)非黑即白.设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和列号, ...

  6. Java黑皮书课后题第8章:***8.35(最大块)给定一个元素为0或者1的方阵,编写程序,找到一个元素都为1的最大的子方阵。程序提示用户输入矩阵的行数。然后显示最大的子方阵的第一个元素、行数

    ***8.35(最大块)给定一个元素为0或者1的方阵,编写程序,找到一个元素都为1的最大的子方阵.程序提示用户输入矩阵的行数.然后显示最大的子方阵的第一个元素.行数 题目 题目描述与运行示例 破题 代 ...

  7. 程序员面试金典 - 面试题 17.23. 最大黑方阵(DP)

    1. 题目 给定一个方阵,其中每个单元(像素)非黑即白. 设计一个算法,找出 4 条边皆为黑色像素的最大子方阵. 返回一个数组 [r, c, size] ,其中 r, c 分别代表子方阵左上角的行号和 ...

  8. 动态规划-各种题型及思路整理(自用笔记,大神绕道)

    目录 简介 分类 基本思想 基本思路 状态转移方程 适用条件 一句话总结 应用 前缀和思想 简介 动态规划(dynamic programming,简称dp),是运筹学的一个分支,是求解决策过程(de ...

  9. Leetcode刷题总结(三)

    1.不用加号的加法 思路:不能用算术运算符,因此考虑位运算来实现加法. class Solution { public:int add(int a, int b) {int sum=0;int car ...

最新文章

  1. Dlib库中实现正脸人脸关键点(landmark)检测的测试代码
  2. 词法分析器构造工具Flex基础学习
  3. C++的强制类型转换
  4. Linux mkdir 命令创建多级目录
  5. nginx 重定向_虚拟机中安装nginx,重定向到resin
  6. jdbc_servlet基础增删改分页2(userinfo表的)
  7. SasSHRM中基于shiro的认证授权:需求分析
  8. 数据结构与算法之反转单向链表和双向链表
  9. ubuntu 64 12.04 oracle,ubuntu server 12.04 x86_64 下安装oracle xe 11 x86_64
  10. 现代女性都有哪些烦恼?
  11. 27. 移除元素 golang
  12. 第四次作业——测试作业
  13. 支付宝 app,网站支付宝登录
  14. linux c 进程池 简单实现
  15. Linux操作系统(3.2.14find)
  16. 基于改进SSIM算法的图像清晰度识别
  17. 26款 网络会议/视频会议开源软件
  18. # 第一次面试问题详解
  19. 任鸟飞FPS类型游戏绘制,骨骼,u3d,UE4和游戏安全,反外挂研究 (三)
  20. Navicat 设置自动插入时间触发器

热门文章

  1. FabFilter 发布 Volcano 3 滤波器插件
  2. 计算机视觉系列-全球小麦检测Kaggle比赛学习笔记(7)
  3. Mari 头部贴图最终效果
  4. mysql图片添加水印_OSS 图片添加水印 image/watermark,image_
  5. 读“计较,是贫穷的开始”有感
  6. 1114:白细胞计数(C C++)
  7. Python中的groupby分组
  8. 【哈希冲突解决】线性探测再散列和二次探测再散列
  9. SkeyeVSS智慧办公区视频监控解决方案
  10. 机器学习之MATLAB代码--SSA-CNN-BiLSTM做电池容量预测(十)